Kernel KVM virtualization development
 help / color / mirror / Atom feed
From: "Garg, Shivank" <shivankg@amd.com>
To: "pbonzini@redhat.com" <pbonzini@redhat.com>,
	"seanjc@google.com" <seanjc@google.com>
Cc: "kvm@vger.kernel.org" <kvm@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 5/7] KVM: selftests: Add common helper to get mask+number of usable memory NUMA nodes
Date: Sun, 6 Sep 2026 17:53:15 +0000	[thread overview]
Message-ID: <8c6da18a1edc1ad60bcbf5d3c5956ad3a0aa745e.camel@amd.com> (raw)
In-Reply-To: <20260903001625.2792367-6-seanjc@google.com>

On Wed, 2026-09-02 at 17:16 -0700, Sean Christopherson wrote:
> Extract and slightly adopt the xAPIC IPI test's logic for getting the mask
> and number of usable memory NUMA nodes into a common helper.  To allow for
> friendlier behavior when the underlying kernel doesn't support NUMA, or the
> test was run without sufficient permissions, zero out the mask and return
> "zero nodes" if get_mempolicy() fails with ENOSYS or EPERM respectively.
> I.e. allow tests to skip (sub)tests instead of throwing an assert.
> 
> Suggested-by: Shivank Garg <shivankg@amd.com>
> Signed-off-by: Sean Christopherson <seanjc@google.com>
> ---
>  tools/testing/selftests/kvm/include/numaif.h     | 13 +++++++++++++
>  tools/testing/selftests/kvm/x86/xapic_ipi_test.c |  5 +----
>  2 files changed, 14 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/testing/selftests/kvm/include/numaif.h b/tools/testing/selftests/kvm/include/numaif.h
> index 299dddff2729..0945500c6322 100644
> --- a/tools/testing/selftests/kvm/include/numaif.h
> +++ b/tools/testing/selftests/kvm/include/numaif.h
> @@ -41,6 +41,19 @@ KVM_SYSCALL_DEFINE(mbind, 6, void *, addr, unsigned long, size, int, mode,
>   */
>  #define MAXNODE_FOR_MASK(mask) (BITS_PER_TYPE(mask) + 1)
>  
> +static inline int kvm_get_numa_memory_nodes(unsigned long *nodemask)
> +{
> +	int r;
> +
> +	*nodemask = 0;
> +
> +	r = get_mempolicy(NULL, nodemask, MAXNODE_FOR_MASK(*nodemask), 0,
> +			  MPOL_F_MEMS_ALLOWED);
> +	TEST_ASSERT(!r || errno == ENOSYS || errno == EPERM,
> +		    "Unexpected get_mempolicy() failure");
> +	return __builtin_popcountl(*nodemask);
> +}
> +
>  /*
>   * Return the node ID of the next NUMA node in the mask, starting at @from+1.
>   * Guarantees a node is found, and that the found node is not @from.  Pass -1
> diff --git a/tools/testing/selftests/kvm/x86/xapic_ipi_test.c b/tools/testing/selftests/kvm/x86/xapic_ipi_test.c
> index 7144ad833ae0..42c601617f5a 100644
> --- a/tools/testing/selftests/kvm/x86/xapic_ipi_test.c
> +++ b/tools/testing/selftests/kvm/x86/xapic_ipi_test.c
> @@ -244,15 +244,12 @@ void do_migrations(struct test_data_page *data, int run_secs, int delay_usecs,
>  	fprintf(stderr, "Calling migrate_pages every %d microseconds\n",
>  		delay_usecs);
>  
> -	/* Get set of first 64 numa nodes available */
> -	kvm_get_mempolicy(NULL, &nodemask, MAXNODE_FOR_MASK(nodemask),
> -			  0, MPOL_F_MEMS_ALLOWED);
> +	nodes = kvm_get_numa_memory_nodes(&nodemask);
>  
>  	fprintf(stderr, "Numa nodes found amongst first %lu possible nodes "
>  		"(each 1-bit indicates node is present): %#lx\n",
>  		BITS_PER_TYPE(nodemask), nodemask);
>  
> -	nodes = __builtin_popcountl(nodemask);
>  	TEST_ASSERT(nodes > 1,
>  		    "Did not find at least 2 numa nodes. Can't do migration");
>  

Reviewed-by: Shivank Garg <shivankg@amd.com>

Thanks,
Shivank

  reply	other threads:[~2026-09-06 17:53 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-03  0:16 [PATCH 0/7] KVM: selftests: Fix maxnodes bugs and cleanup related code Sean Christopherson
2026-09-03  0:16 ` [PATCH 1/7] KVM: selftests: Account for kernel's off-by-one bug in NUMA node syscalls Sean Christopherson
2026-09-06 10:08   ` Garg, Shivank
2026-09-03  0:16 ` [PATCH 2/7] KVM: selftests: Fix maxnode argument to migrate_pages() in xapic_ipi_test Sean Christopherson
2026-09-03  0:16 ` [PATCH 3/7] KVM: selftests: use BITS_PER_TYPE() for NUMA masks Sean Christopherson
2026-09-03  0:16 ` [PATCH 4/7] KVM: selftests: Compute node masks on-demand in xAPIC IPI test Sean Christopherson
2026-09-06 17:05   ` Garg, Shivank
2026-09-03  0:16 ` [PATCH 5/7] KVM: selftests: Add common helper to get mask+number of usable memory NUMA nodes Sean Christopherson
2026-09-06 17:53   ` Garg, Shivank [this message]
2026-09-03  0:16 ` [PATCH 6/7] KVM: selftests: Automatically run xAPIC IPI migration test when possible Sean Christopherson
2026-09-06 18:01   ` Garg, Shivank
2026-09-03  0:16 ` [PATCH 7/7] KVM: selftests: Skip xAPIC IPI migration test when forced but unsupported Sean Christopherson
2026-09-06 18:13   ` Garg, Shivank

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=8c6da18a1edc1ad60bcbf5d3c5956ad3a0aa745e.camel@amd.com \
    --to=shivankg@amd.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.com \
    --cc=seanjc@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox