From: Thomas Gleixner <tglx@linutronix.de>
To: David Woodhouse <dwmw2@infradead.org>,
linux-kernel <linux-kernel@vger.kernel.org>,
xen-devel <xen-devel@lists.xenproject.org>
Subject: Re: IRQ affinity not working on Xen pci-platform device
Date: Fri, 03 Mar 2023 17:51:07 +0100 [thread overview]
Message-ID: <87fsalkcck.ffs@tglx> (raw)
In-Reply-To: <07866eaf6354dd43d87cffb6eebf101716845b66.camel@infradead.org>
David!
On Fri, Mar 03 2023 at 15:16, David Woodhouse wrote:
> I added the 'xen_no_vector_callback' kernel parameter a while back
> (commit b36b0fe96af) to ensure we could test that more for Linux
> guests.
>
> Most of my testing at the time was done with just two CPUs, and I
> happened to just test it with four. It fails, because the IRQ isn't
> actually affine to CPU0.
>
> I tried making it work anyway (in line with the comment in platform-
> pci.c which says that it shouldn't matter if it *runs* on CPU0 as long
> as it processes events *for* CPU0). That didn't seem to work.
>
> If I put the irq_set_affinity() call *before* the request_irq() that
> does actually work. But it's setting affinity on an IRQ it doesn't even
> own yet.
The core allows it for raisins. See below... :)
> Test hacks below; this is testable with today's QEMU master (yay!) and:
>
> qemu-system-x86_64 -display none -serial mon:stdio -smp 4 \
> -accel kvm,xen-version=0x4000a,kernel-irqchip=split \
> -kernel ~/git/linux/arch/x86/boot//bzImage \
> -append "console=ttyS0,115200 xen_no_vector_callback"
>
> ...
>
> [ 0.577173] ACPI: \_SB_.LNKC: Enabled at IRQ 11
> [ 0.578149] The affinity mask was 0-3
> [ 0.579081] The affinity mask is 0-3 and the handler is on 2
> [ 0.580288] The affinity mask is 0 and the handler is on 2
What happens is that once the interrupt is requested, the affinity
setting is deferred to the first interrupt. See the marvelous dance in
arch/x86/kernel/apic/msi.c::msi_set_affinity().
If you do the setting before request_irq() then the startup will assign
it to the target mask right away.
Btw, you are using irq_get_affinity_mask(), which gives you the desired
target mask. irq_get_effective_affinity_mask() gives you the real one.
Can you verify that the thing moves over after the first interrupt or is
that too late already?
Thanks,
tglx
next prev parent reply other threads:[~2023-03-03 16:51 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-03-03 15:16 IRQ affinity not working on Xen pci-platform device David Woodhouse
2023-03-03 16:51 ` Thomas Gleixner [this message]
2023-03-03 16:54 ` David Woodhouse
2023-03-04 0:28 ` Thomas Gleixner
2023-03-04 9:57 ` IRQ affinity not working on Xen pci-platform device^W^W^W QEMU split-irqchip I/O APIC David Woodhouse
2023-03-04 10:15 ` David Woodhouse
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=87fsalkcck.ffs@tglx \
--to=tglx@linutronix.de \
--cc=dwmw2@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=xen-devel@lists.xenproject.org \
/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