From: sashiko-bot@kernel.org
To: "Sean Christopherson" <seanjc@google.com>
Cc: kvm@vger.kernel.org
Subject: Re: [PATCH v6 09/18] KVM: selftests: Verify interrupts are received when IRQ affinity changes in IRQ test
Date: Wed, 10 Jun 2026 01:06:57 +0000 [thread overview]
Message-ID: <20260610010658.1E0501F00898@smtp.kernel.org> (raw)
In-Reply-To: <20260610005338.2967132-10-seanjc@google.com>
Thank you for your contribution! Sashiko AI review found 3 potential issue(s) to consider:
- [Medium] Using get_nprocs() to generate a random CPU ID for IRQ affinity can produce offline or non-existent CPU IDs, leading to test crashes.
- [Medium] The test picks `gsi` and `vector` using an unseeded RNG state, making the selections completely deterministic across runs.
- [Low] The `irq_cpu` variable is used uninitialized in a TEST_ASSERT message when the test is run with `-d` but without `-a`.
--
commit 49ffc3d4b49fbef72ecbe743669ae8e39951edb2
Author: David Matlack <dmatlack@google.com>
KVM: selftests: Verify interrupts are received when IRQ affinity changes in IRQ test
This commit extends the eventfd IRQ test with a '-a' flag to randomly
affinitize the device's host IRQ to different physical CPUs. This stresses
the kernel's ability to maintain correct interrupt routing and delivery
during dynamic affinity changes.
> diff --git a/tools/testing/selftests/kvm/irq_test.c b/tools/testing/selftests/kvm/irq_test.c
> index 6888be54ee4a9..9e22874902628 100644
> --- a/tools/testing/selftests/kvm/irq_test.c
> +++ b/tools/testing/selftests/kvm/irq_test.c
[ ... ]
> @@ -160,10 +163,13 @@ int main(int argc, char **argv)
> int i, j, c, msix, eventfd;
> struct iommu *iommu;
> struct kvm_vm *vm;
> - int irq;
> + int irq, irq_cpu;
[Severity: Medium]
Does this test pick gsi and vector using an unseeded rng state?
At the beginning of main(), kvm_random_u64_in_range() is called with kvm_rng.
Because kvm_rng is in BSS, its seed is 0. The actual RNG initialization
happens later during vm_create_with_vcpus(). This means the initial
randomization will predictably return the minimum bounds (24 for gsi and
32 for vector), defeating the intended coverage.
[ ... ]
> @@ -192,7 +198,12 @@ int main(int argc, char **argv)
> printf("Using device %s MSI-X[%d] (IRQ-%u)\n", device_bdf, msix,
> irq);
> } else {
> + TEST_ASSERT(!irq_affinity,
> + "Setting IRQ affinity (-a) requires a backing device (-d)");
> +
> eventfd = kvm_new_eventfd();
> + irq = -1;
> + irq_cpu = -1;
> }
[Severity: Low]
Is irq_cpu used uninitialized here when the test is run with -d but without -a?
When a backing device is specified (-d), the code enters the if (device_bdf)
block and irq_cpu remains uninitialized. If a vCPU times out waiting for an
interrupt, the TEST_ASSERT macro evaluates and passes the uninitialized
irq_cpu to the variadic format string, printing garbage values.
[ ... ]
> @@ -216,6 +227,11 @@ int main(int argc, char **argv)
>
> kvm_route_msi(vm, gsi, vcpu, vector);
>
> + if (irq_affinity) {
> + irq_cpu = kvm_random_u64(&kvm_rng) % get_nprocs();
> + proc_irq_set_smp_affinity(irq, irq_cpu);
> + }
[Severity: Medium]
Can get_nprocs() produce offline or non-existent CPU IDs, leading to test
crashes?
get_nprocs() returns the total number of currently online processors, not the
maximum CPU ID. In systems with sparse CPU topologies or offline CPUs (e.g.,
CPUs 0, 2, 3 online; CPU 1 offline), get_nprocs() returns 3.
The modulo calculation will produce indices from 0 to 2. If it produces 1, the
test writes '1' to /proc/irq/<irq>/smp_affinity_list. This will fail with
-EINVAL because CPU 1 is offline, triggering a spurious test failure via
TEST_ASSERT(r > 0) in proc_irq_set_smp_affinity().
[ ... ]
> @@ -229,8 +245,8 @@ int main(int argc, char **argv)
> cpu_relax();
>
> TEST_ASSERT(GUEST_RECEIVED_IRQ(vcpu),
> - "vCPU %d timed out waiting for IRQ (vector 0x%x) from GSI %d\n",
> - vcpu->id, vector, gsi);
> + "vCPU %d timed out waiting for IRQ (vector 0x%x) from GSI %d (via CPU %d)\n",
> + vcpu->id, vector, gsi, irq_cpu);
>
> WRITE_AND_SYNC_TO_GUEST(vm, guest_received_irq[vcpu->id], false);
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260610005338.2967132-1-seanjc@google.com?part=9
next prev parent reply other threads:[~2026-06-10 1:06 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-06-10 0:53 [PATCH v6 00/18] KVM: selftests: Add eventfd+VFIO IRQ test Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 01/18] KVM: selftests: Build and link selftests/vfio/lib into KVM selftests Sean Christopherson
2026-06-10 1:03 ` sashiko-bot
2026-06-10 0:53 ` [PATCH v6 02/18] KVM: selftests: Add macros to read/write+sync to/from guest memory Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 03/18] KVM: selftests: Rename guest_rng to kvm_rng Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 04/18] KVM: selftests: Add helper to generate random u64 in range [min,max] Sean Christopherson
2026-06-10 1:01 ` sashiko-bot
2026-06-10 0:53 ` [PATCH v6 05/18] KVM: selftests: Add an irqfd send+receive (and later IRQ bypass) test Sean Christopherson
2026-06-10 1:08 ` sashiko-bot
2026-06-10 0:53 ` [PATCH v6 06/18] KVM: selftests: Add helper to get host IRQ from device MSI-X for IRQ bypass test Sean Christopherson
2026-06-10 1:01 ` sashiko-bot
2026-06-10 0:53 ` [PATCH v6 07/18] KVM: selftests: Add VFIO device support to eventfd IRQ test Sean Christopherson
2026-06-10 1:05 ` sashiko-bot
2026-06-10 0:53 ` [PATCH v6 08/18] KVM: selftests: Add a helper to set proc IRQ affinity for " Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 09/18] KVM: selftests: Verify interrupts are received when IRQ affinity changes in " Sean Christopherson
2026-06-10 1:06 ` sashiko-bot [this message]
2026-06-10 0:53 ` [PATCH v6 10/18] KVM: selftests: Add option to set empty routing between IRQs in eventfd " Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 11/18] KVM: selftests: Make number of IRQs configurable in " Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 12/18] KVM: selftests: Verify non-postable IRQ remapping " Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 13/18] KVM: selftests: Add kvm_gettid() wrapper and convert users Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 14/18] KVM: selftests: Add kvm_sched_getaffinity() " Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 15/18] KVM: selftests: Add a utility to pin a task to a random CPU, given a CPU set Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 16/18] KVM: selftests: Verify vCPU migration during IRQ delivery in IRQ test Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 17/18] KVM: selftests: Make number of vCPUs configurable " Sean Christopherson
2026-06-10 0:53 ` [PATCH v6 18/18] KVM: selftests: Add xAPIC support in eventfd " 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=20260610010658.1E0501F00898@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=kvm@vger.kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--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 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.