From: Sean Christopherson <seanjc@google.com>
To: Josh Hilke <jrhilke@google.com>
Cc: Paolo Bonzini <pbonzini@redhat.com>,
kvm@vger.kernel.org, David Matlack <dmatlack@google.com>,
Alex Williamson <alex@shazbot.org>
Subject: Re: [PATCH v2 05/14] KVM: selftests: Add support for random host IRQ affinity
Date: Wed, 1 Apr 2026 13:01:42 -0700 [thread overview]
Message-ID: <ac15psZs2_EGAVt6@google.com> (raw)
In-Reply-To: <20260331194033.3890309-6-jrhilke@google.com>
On Tue, Mar 31, 2026, Josh Hilke wrote:
> From: David Matlack <dmatlack@google.com>
>
> Add the '-a' flag to vfio_pci_irq_test to randomly affinitize the
> device's host IRQ to different physical CPUs throughout the test. This
> stresses the kernel's ability to maintain correct interrupt routing and
> delivery even as the underlying hardware IRQ affinity is changed
> dynamically via /proc/irq/.
>
> Signed-off-by: David Matlack <dmatlack@google.com>
> Signed-off-by: Josh Hilke <jrhilke@google.com>
> Co-developed-by: Josh Hilke <jrhilke@google.com>
Please run checkpatch, the order here is wrong.
> @@ -122,13 +125,19 @@ int main(int argc, char **argv)
> struct vfio_pci_device *device;
> struct iommu *iommu;
> const char *device_bdf;
> + FILE *irq_affinity_fp;
> int i, j, c, msi, irq;
> struct kvm_vm *vm;
> + int irq_cpu;
> + int ret;
Use the existing "int" declaration.
> device_bdf = vfio_selftests_get_bdf(&argc, argv);
>
> - while ((c = getopt(argc, argv, "h")) != -1) {
> + while ((c = getopt(argc, argv, "ah")) != -1) {
> switch (c) {
> + case 'a':
> + irq_affinity = true;
> + break;
> case 'h':
> default:
> help(argv[0]);
> @@ -163,6 +172,14 @@ int main(int argc, char **argv)
> continue;
> }
>
> + if (irq_affinity) {
> + char path[PATH_MAX];
> +
> + snprintf(path, sizeof(path), "/proc/irq/%d/smp_affinity_list", irq);
> + irq_affinity_fp = fopen(path, "w");
> + TEST_ASSERT(irq_affinity_fp, "fopen(%s) failed", path);
> + }
This plus setting the affinity is begging for a library function, probably
provided by what's currently called get_irq_number() and friends.
> +
> /* Set a consistent seed so that test are repeatable. */
> srand(0);
>
> @@ -172,6 +189,13 @@ int main(int argc, char **argv)
>
> kvm_route_msi(vm, gsi, vcpu, vector);
>
> + if (irq_affinity && vcpu->id == 0) {
> + irq_cpu = rand() % get_nprocs();
> +
> + ret = fprintf(irq_affinity_fp, "%d\n", irq_cpu);
> + TEST_ASSERT(ret > 0, "Failed to affinitize IRQ-%d to CPU %d", irq, irq_cpu);
> + }
> +
> for (j = 0; j < nr_vcpus; j++) {
> TEST_ASSERT(
> !READ_FROM_GUEST(vm, guest_received_irq[vcpu->id]),
> @@ -189,6 +213,8 @@ int main(int argc, char **argv)
> if (timespec_to_ns(timespec_elapsed(start)) > TIMEOUT_NS) {
> printf("Timeout waiting for interrupt!\n");
> printf(" vCPU: %d\n", vcpu->id);
> + if (irq_affinity)
> + printf(" irq_cpu: %d\n", irq_cpu);
>
> TEST_FAIL("vCPU never received IRQ!\n");
> }
> @@ -203,6 +229,9 @@ int main(int argc, char **argv)
> pthread_join(vcpu_threads[i], NULL);
> }
>
> + if (irq_affinity)
> + fclose(irq_affinity_fp);
> +
> printf("Host interrupts handled:\n");
> printf(" IRQ-%d: %lu\n", irq, get_irq_count(irq) - irq_count);
> printf(" Posted-interrupt notification events: %lu\n",
> --
> 2.53.0.1118.gaef5881109-goog
>
next prev parent reply other threads:[~2026-04-01 20:01 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-31 19:40 [PATCH v2 00/14] KVM: selftests: Link with VFIO selftests lib and test device interrupts Josh Hilke
2026-03-31 19:40 ` [PATCH v2 01/14] KVM: selftests: Build and link sefltests/vfio/lib into KVM selftests Josh Hilke
2026-04-01 18:17 ` Sean Christopherson
2026-04-01 23:49 ` Josh Hilke
2026-03-31 19:40 ` [PATCH v2 02/14] KVM: selftests: Add helper functions for IRQ testing Josh Hilke
2026-04-01 18:26 ` Sean Christopherson
2026-04-01 23:54 ` Josh Hilke
2026-03-31 19:40 ` [PATCH v2 03/14] KVM: selftests: Add vfio_pci_irq_test Josh Hilke
2026-04-01 19:58 ` Sean Christopherson
2026-04-02 0:13 ` Josh Hilke
2026-04-02 17:52 ` Sean Christopherson
2026-03-31 19:40 ` [PATCH v2 04/14] KVM: selftests: Reproduce tests that rely on randomization Josh Hilke
2026-03-31 19:40 ` [PATCH v2 05/14] KVM: selftests: Add support for random host IRQ affinity Josh Hilke
2026-04-01 20:01 ` Sean Christopherson [this message]
2026-04-02 1:16 ` Josh Hilke
2026-03-31 19:40 ` [PATCH v2 06/14] KVM: selftests: Allow blocking vCPUs via HLT Josh Hilke
2026-04-01 20:03 ` Sean Christopherson
2026-03-31 19:40 ` [PATCH v2 07/14] KVM: selftests: Add support for physical device MSI triggers Josh Hilke
2026-04-01 20:24 ` Sean Christopherson
2026-04-02 3:23 ` Josh Hilke
2026-03-31 19:40 ` [PATCH v2 08/14] KVM: selftests: Add option to clear GSI routes Josh Hilke
2026-03-31 19:40 ` [PATCH v2 09/14] KVM: selftests: Make test IRQ count configurable Josh Hilke
2026-03-31 19:40 ` [PATCH v2 10/14] KVM: selftests: Add support for NMI delivery Josh Hilke
2026-04-01 20:29 ` Sean Christopherson
2026-04-02 5:27 ` Josh Hilke
2026-03-31 19:40 ` [PATCH v2 11/14] KVM: selftests: Add support for vCPU pinning Josh Hilke
2026-04-01 20:55 ` Sean Christopherson
2026-03-31 19:40 ` [PATCH v2 12/14] KVM: selftests: Support testing with multiple vCPUs Josh Hilke
2026-03-31 19:40 ` [PATCH v2 13/14] KVM: selftests: Add xAPIC mode support Josh Hilke
2026-03-31 19:40 ` [PATCH v2 14/14] KVM: selftests: Make vfio_pci_irq_test timeout configurable Josh Hilke
2026-04-01 21:00 ` Sean Christopherson
2026-04-01 18:17 ` [PATCH v2 00/14] KVM: selftests: Link with VFIO selftests lib and test device interrupts Sean Christopherson
2026-04-01 18:52 ` David Matlack
2026-04-01 19:07 ` Sean Christopherson
2026-04-01 20:12 ` David Matlack
2026-04-01 23:41 ` Josh Hilke
2026-04-01 23:58 ` David Matlack
2026-04-02 0:38 ` Josh Hilke
2026-04-02 1:49 ` Josh Hilke
2026-04-02 17:35 ` Sean Christopherson
2026-04-02 17:56 ` David Matlack
2026-04-02 18:07 ` Josh Hilke
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=ac15psZs2_EGAVt6@google.com \
--to=seanjc@google.com \
--cc=alex@shazbot.org \
--cc=dmatlack@google.com \
--cc=jrhilke@google.com \
--cc=kvm@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox