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: Sat, 04 Mar 2023 01:28:17 +0100 [thread overview]
Message-ID: <87356ljr6m.ffs@tglx> (raw)
In-Reply-To: <1060e7786498f384634b01c335bf7bf43365e1fe.camel@infradead.org>
David!
On Fri, Mar 03 2023 at 16:54, David Woodhouse wrote:
> On Fri, 2023-03-03 at 17:51 +0100, Thomas Gleixner wrote:
>> >
>> > [ 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?
>
> It doesn't seem to move. The hack to just return IRQ_NONE if invoked on
> CPU != 0 was intended to do just that. It's a level-triggered interrupt
> so when the handler does nothing on the "wrong" CPU, it ought to get
> invoked again on the *correct* CPU and actually work that time.
So much for the theory. This is virt after all so it does not
necessarily behave like real hardware.
> But no, as the above logs show, it gets invoked twice *both* on CPU2.
Duh. I missed that. Can you instrument whether this ends up in in the
actual irq affinity setter function of the underlying irq chip at all?
> If I do the setting before request_irq() then it should assign it right
> away (unless that IRQ was already in use?
Correct.
> It's theoretically a shared PCI INTx line). But even then, that would
> mean I'm messing with affinity on an IRQ I haven't even requested yet
> and don't own?
Well, that's not any different from userspace changing the affinity of
an interrupt.
Thanks,
tglx
next prev parent reply other threads:[~2023-03-04 0:28 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
2023-03-03 16:54 ` David Woodhouse
2023-03-04 0:28 ` Thomas Gleixner [this message]
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=87356ljr6m.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 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.