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,  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
> 

  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 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.