All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sean Christopherson <seanjc@google.com>
To: Josh Hilke <jrhilke@google.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
	kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
	 David Matlack <dmatlack@google.com>,
	Alex Williamson <alex@shazbot.org>
Subject: Re: [PATCH v3 13/16] KVM: selftests: Verify vCPU migration during IRQ delivery
Date: Tue, 26 May 2026 19:23:07 -0700	[thread overview]
Message-ID: <ahZVi0njg6j38Q2f@google.com> (raw)
In-Reply-To: <20260421231557.1254270-14-jrhilke@google.com>

On Tue, Apr 21, 2026, Josh Hilke wrote:
> From: David Matlack <dmatlack@google.com>
> 
> Add the '-m' flag to irq_test to migrate vCPU threads across random
> physical CPUs during the test. This validates KVM's ability to handle
> vCPUs changing physical CPUs while interrupts are actively being
> injected.
> 
> To support this, add wrappers for gettid() and sched_getaffinity(), and
> introduce pin_task_to_random_cpu() in lib/kvm_util.c.
> 
> Co-developed-by: Josh Hilke <jrhilke@google.com>
> Signed-off-by: Josh Hilke <jrhilke@google.com>
> Signed-off-by: David Matlack <dmatlack@google.com>
> ---
>  .../selftests/kvm/include/kvm_syscalls.h      |  6 ++++
>  .../testing/selftests/kvm/include/kvm_util.h  |  2 ++
>  tools/testing/selftests/kvm/irq_test.c        | 34 +++++++++++++++++--
>  tools/testing/selftests/kvm/lib/kvm_util.c    | 19 +++++++++++
>  4 files changed, 59 insertions(+), 2 deletions(-)
> 
> diff --git a/tools/testing/selftests/kvm/include/kvm_syscalls.h b/tools/testing/selftests/kvm/include/kvm_syscalls.h
> index d4e613162bba..d73f45c5df92 100644
> --- a/tools/testing/selftests/kvm/include/kvm_syscalls.h
> +++ b/tools/testing/selftests/kvm/include/kvm_syscalls.h
> @@ -73,9 +73,15 @@ static inline int kvm_dup(int fd)
>  	return new_fd;
>  }
>  
> +static inline int gettid(void)

gettid() already exists in at least some of my environments:

include/kvm_syscalls.h:87:19: error: static declaration of ‘gettid’ follows non-static declaration
   87 | static inline int gettid(void)
      |                   ^~~~~~
In file included from /usr/include/unistd.h:1221,
                 from /usr/include/x86_64-linux-gnu/bits/sigstksz.h:24,
                 from /usr/include/signal.h:328,
                 from include/test_util.h:12,
                 from lib/kvm_util.c:7:
/usr/include/x86_64-linux-gnu/bits/unistd_ext.h:34:16: note: previous declaration of ‘gettid’ with type ‘__pid_t(void)’ {aka ‘int(void)’}
   34 | extern __pid_t gettid (void) __THROW;
      |                ^~~~~~

> +void pin_task_to_random_cpu(pthread_t task, cpu_set_t *possible_cpus)
> +{
> +	int i = 0, nr_cpus = CPU_COUNT(possible_cpus);
> +	int cpu, target_idx;
> +
> +	target_idx = kvm_random_u64(&kvm_rng) % nr_cpus;
> +
> +	for (cpu = 0; i < nr_cpus; cpu++) {

Shouldn't this be bounded on "cpu < nr_cpus"?  If 'i' gets to nr_cpus, it means
"i == target_idx" was never taken.  And at that point, the loop will hang
indefinitely because cpu will likely be waaaay out of bounds of possible_cpus,
i.e. the loop will always continue.

> +		if (!CPU_ISSET(cpu, possible_cpus))
> +			continue;
> +
> +		if (i == target_idx) {
> +			pin_task_to_cpu(task, cpu);
> +			return;
> +		}
> +		i++;
> +	}

This should TEST_FAIL().  Or maybe "break" on the match, and the assert that
i == target_idx?

> +}
> +
>  void kvm_parse_vcpu_pinning(const char *pcpus_string, uint32_t vcpu_to_pcpu[],
>  			    int nr_vcpus)
>  {
> -- 
> 2.54.0.rc2.533.g4f5dca5207-goog
> 

  reply	other threads:[~2026-05-27  2:23 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-21 23:15 [PATCH v3 00/16] KVM: selftests: Link with VFIO selftests lib and test device interrupts Josh Hilke
2026-04-21 23:15 ` [PATCH v3 01/16] KVM: selftests: Build and link sefltests/vfio/lib into KVM selftests Josh Hilke
2026-04-21 23:15 ` [PATCH v3 02/16] KVM: selftests: Add /proc/interrupts parsing helpers Josh Hilke
2026-04-21 23:15 ` [PATCH v3 03/16] KVM: selftests: Add guest read/write macros Josh Hilke
2026-05-27  1:52   ` Sean Christopherson
2026-05-28 23:01     ` Josh Hilke
2026-05-28 23:08       ` Sean Christopherson
2026-04-21 23:15 ` [PATCH v3 04/16] KVM: selftests: Rename guest_rng to kvm_rng Josh Hilke
2026-04-21 23:15 ` [PATCH v3 05/16] KVM: selftests: Add helper to generate random u64 in range [min,max] Josh Hilke
2026-05-27  1:58   ` Sean Christopherson
2026-05-28 23:01     ` Josh Hilke
2026-04-21 23:15 ` [PATCH v3 06/16] KVM: selftests: Add IRQ injection test Josh Hilke
2026-05-27  1:59   ` Sean Christopherson
     [not found]     ` <CAAdrzjs37a-hEneORNmzOvOkh4TX4Dmn6bWKEm5L4hgmkUO0wA@mail.gmail.com>
2026-05-28 23:14       ` Sean Christopherson
2026-05-27  2:10   ` Sean Christopherson
2026-05-28 23:02     ` Josh Hilke
2026-04-21 23:15 ` [PATCH v3 07/16] KVM: selftests: Verify device IRQs are routed to vCPUs Josh Hilke
2026-04-21 23:15 ` [PATCH v3 08/16] KVM: selftests: Verify IRQ affinity changes Josh Hilke
2026-04-21 23:15 ` [PATCH v3 09/16] KVM: selftests: Verify IRQs wake up halted vCPUs Josh Hilke
2026-04-21 23:15 ` [PATCH v3 10/16] KVM: selftests: Verify dynamic IRQ routing updates Josh Hilke
2026-04-21 23:15 ` [PATCH v3 11/16] KVM: selftests: Configure number of IRQs Josh Hilke
2026-04-21 23:15 ` [PATCH v3 12/16] KVM: selftests: Verify non-postable IRQ remapping Josh Hilke
2026-05-27  2:13   ` Sean Christopherson
2026-05-28 23:03     ` Josh Hilke
2026-04-21 23:15 ` [PATCH v3 13/16] KVM: selftests: Verify vCPU migration during IRQ delivery Josh Hilke
2026-05-27  2:23   ` Sean Christopherson [this message]
2026-05-28 23:05     ` Josh Hilke
2026-05-28 23:24       ` Sean Christopherson
2026-04-21 23:15 ` [PATCH v3 14/16] KVM: selftests: Print vCPU affinity on timeout Josh Hilke
2026-04-21 23:15 ` [PATCH v3 15/16] KVM: selftests: Configure number of vCPUs Josh Hilke
2026-04-21 23:15 ` [PATCH v3 16/16] KVM: selftests: Add xAPIC support Josh Hilke
2026-05-27  1:50 ` [PATCH v3 00/16] KVM: selftests: Link with VFIO selftests lib and test device interrupts Sean Christopherson

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=ahZVi0njg6j38Q2f@google.com \
    --to=seanjc@google.com \
    --cc=alex@shazbot.org \
    --cc=dmatlack@google.com \
    --cc=jrhilke@google.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=pbonzini@redhat.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.