* Re: [PATCH 0/2] Re-raise irq_work lost during Xen suspend
[not found] <1793977074.8631fc262581453bbf619ec5b2062170.1a1b15dc430000403d@vates.tech>
@ 2026-11-06 15:36 ` Sebastian Andrzej Siewior
2026-11-09 10:16 ` Julian Vetter
0 siblings, 1 reply; 3+ messages in thread
From: Sebastian Andrzej Siewior @ 2026-11-06 15:36 UTC (permalink / raw)
To: Julian Vetter
Cc: xen-devel, linux-kernel, Juergen Gross, Thomas Gleixner,
Peter Zijlstra, Stefano Stabellini, Oleksandr Tyshchenko,
Mathieu Desnoyers, Jiayuan Chen, Masami Hiramatsu (Google),
Vineeth Pillai (Google),
Adrian Hunter
On 2026-11-06 15:57:40 [+0100], Julian Vetter wrote:
> We hit this issue with an Ubuntu 26.04 cloudimage guests (7.0 based
> kernel with the 8250 as an nbcon console) on XCP-ng 8.3 / Xen 4.17. With
> a kernel commandline adding two consoles, i.e., 'console=ttyS1
> console=ttyS0'. During a live migration on that setup the printk()s from
> gnttab_resume() and xen_irq_resume() queue nbcon_irq_work while the APIC
> is disabled. Thus the list transitions from empty to non-empty, but
> doesn't receive the IPI to empty the list again. Afterwards the list
> stays non-empty, so the IPI never fires and all irq_work piles up.
>
> The Commit 560f4deda327 ("printk/nbcon: Change nbcon_irq_work to
> IRQ_WORK_LAZY") removed this particular issue because declaring the IRQ
> work to be lazy, causes the timer interrupt to trigger the irq work
> instead. But any other non-lazy irq_work queued in that window is still
> lost the same way and will cause the list to fill up without being
> handled.
Adrian has this:
https://lore.kernel.org/all/20261102074039.26983-2-adrian.hunter@intel.com/
I sort of asked for flush on suspend but Adrian pointed out the NMI
problem.
Looking at #1, you could probably limit it to a nop on
!arch_irq_work_has_interrupt(). The tick should not be disabled if
irq_work_needs_cpu() returns true (you don't add anything).
And lazy items get handled via irq_work_tick() anyway. This make me
think if it gets any easier if we handle both in irq_work_tick(). On x86
raised_list is evaluated anyway so by dropping
arch_irq_work_has_interrupt() we would avoid the APIC check and handle
list in this rare case. If the IRQ-work is working then the list remains
empty.
> Signed-off-by: Julian Vetter <julian.vetter@vates.tech>
Sebastian
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 0/2] Re-raise irq_work lost during Xen suspend
2026-11-06 15:36 ` [PATCH 0/2] Re-raise irq_work lost during Xen suspend Sebastian Andrzej Siewior
@ 2026-11-09 10:16 ` Julian Vetter
2026-11-09 10:56 ` Adrian Hunter
0 siblings, 1 reply; 3+ messages in thread
From: Julian Vetter @ 2026-11-09 10:16 UTC (permalink / raw)
To: Sebastian Andrzej Siewior
Cc: xen-devel, linux-kernel, Juergen Gross, Thomas Gleixner,
Peter Zijlstra, Stefano Stabellini, Oleksandr Tyshchenko,
Mathieu Desnoyers, Jiayuan Chen, Masami Hiramatsu (Google),
Vineeth Pillai (Google),
Adrian Hunter
On 11/6/26 4:39 PM, Sebastian Andrzej Siewior wrote:
> On 2026-11-06 15:57:40 [+0100], Julian Vetter wrote:
>> We hit this issue with an Ubuntu 26.04 cloudimage guests (7.0 based
>> kernel with the 8250 as an nbcon console) on XCP-ng 8.3 / Xen 4.17. With
>> a kernel commandline adding two consoles, i.e., 'console=ttyS1
>> console=ttyS0'. During a live migration on that setup the printk()s from
>> gnttab_resume() and xen_irq_resume() queue nbcon_irq_work while the APIC
>> is disabled. Thus the list transitions from empty to non-empty, but
>> doesn't receive the IPI to empty the list again. Afterwards the list
>> stays non-empty, so the IPI never fires and all irq_work piles up.
>>
>> The Commit 560f4deda327 ("printk/nbcon: Change nbcon_irq_work to
>> IRQ_WORK_LAZY") removed this particular issue because declaring the IRQ
>> work to be lazy, causes the timer interrupt to trigger the irq work
>> instead. But any other non-lazy irq_work queued in that window is still
>> lost the same way and will cause the list to fill up without being
>> handled.
>
> Adrian has this:
> https://lore.kernel.org/all/20261102074039.26983-2-adrian.hunter@intel.com/
>
> I sort of asked for flush on suspend but Adrian pointed out the NMI
> problem.
Thanks, I missed that. It is the same issue, just a different trigger.
Adrian's example even ends in the same hung task we see
(fsnotify_mark_destroy_workfn waiting on SRCU). Also, Adrian's
syscore_resume() placement would cover the Xen case as well, as
xen_suspend() calls syscore_resume() after those printk()s.
>
> Looking at #1, you could probably limit it to a nop on
> !arch_irq_work_has_interrupt(). The tick should not be disabled if
> irq_work_needs_cpu() returns true (you don't add anything).
>
Yes, right, the lazy part is pointless.
> And lazy items get handled via irq_work_tick() anyway. This make me
> think if it gets any easier if we handle both in irq_work_tick(). On x86
> raised_list is evaluated anyway so by dropping
> arch_irq_work_has_interrupt() we would avoid the APIC check and handle
> list in this rare case. If the IRQ-work is working then the list remains
> empty.
>
This is maybe a cleaner solution, it needs no APIC access and no call
site in the suspend paths. But irq_work_needs_cpu() would need the same
change, otherwise in a CONFIG_NOHZ=y setting an idle CPU would still sit
on the work until it leaves idle and re-enables the timer tick, no? I
will test this.
>> Signed-off-by: Julian Vetter <julian.vetter@vates.tech>
>
> Sebastian
>
(Sorry, sending from my personal address, my work mail server currently
mangles mails to the list.)
Julian
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 0/2] Re-raise irq_work lost during Xen suspend
2026-11-09 10:16 ` Julian Vetter
@ 2026-11-09 10:56 ` Adrian Hunter
0 siblings, 0 replies; 3+ messages in thread
From: Adrian Hunter @ 2026-11-09 10:56 UTC (permalink / raw)
To: Julian Vetter, Sebastian Andrzej Siewior
Cc: xen-devel, linux-kernel, Juergen Gross, Thomas Gleixner,
Peter Zijlstra, Stefano Stabellini, Oleksandr Tyshchenko,
Mathieu Desnoyers, Jiayuan Chen, Masami Hiramatsu (Google),
Vineeth Pillai (Google)
On 09/11/2026 12:16, Julian Vetter wrote:
> On 11/6/26 4:39 PM, Sebastian Andrzej Siewior wrote:
>>
>> Looking at #1, you could probably limit it to a nop on
>> !arch_irq_work_has_interrupt(). The tick should not be disabled if
>> irq_work_needs_cpu() returns true (you don't add anything).
>>
>
> Yes, right, the lazy part is pointless.
>
>> And lazy items get handled via irq_work_tick() anyway. This make me
>> think if it gets any easier if we handle both in irq_work_tick(). On x86
>> raised_list is evaluated anyway so by dropping
>> arch_irq_work_has_interrupt() we would avoid the APIC check and handle
>> list in this rare case. If the IRQ-work is working then the list remains
>> empty.
>>
>
> This is maybe a cleaner solution, it needs no APIC access and no call site in the suspend paths. But irq_work_needs_cpu() would need the same change, otherwise in a CONFIG_NOHZ=y setting an idle CPU would still sit on the work until it leaves idle and re-enables the timer tick, no? I will test this.
A fix for stable is needed, so need to check that there is no
irq_work that would have a problem running in the tick context.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-11-09 10:56 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
[not found] <1793977074.8631fc262581453bbf619ec5b2062170.1a1b15dc430000403d@vates.tech>
2026-11-06 15:36 ` [PATCH 0/2] Re-raise irq_work lost during Xen suspend Sebastian Andrzej Siewior
2026-11-09 10:16 ` Julian Vetter
2026-11-09 10:56 ` Adrian Hunter
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®