From: Julian Vetter <julian@outer-limits.org>
To: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Cc: xen-devel@lists.xenproject.org, linux-kernel@vger.kernel.org,
Juergen Gross <jgross@suse.com>,
Thomas Gleixner <tglx@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Stefano Stabellini <sstabellini@kernel.org>,
Oleksandr Tyshchenko <oleksandr_tyshchenko@epam.com>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Jiayuan Chen <jiayuan.chen@linux.dev>,
"Masami Hiramatsu (Google)" <mhiramat@kernel.org>,
"Vineeth Pillai (Google)" <vineeth@bitbyteword.org>,
Adrian Hunter <adrian.hunter@intel.com>
Subject: Re: [PATCH 0/2] Re-raise irq_work lost during Xen suspend
Date: Mon, 9 Nov 2026 11:16:06 +0100 [thread overview]
Message-ID: <1fb98f79-183c-4144-aaac-45a437ff2d32@outer-limits.org> (raw)
In-Reply-To: <20261106153647.F7ld02De@linutronix.de>
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
next prev parent reply other threads:[~2026-11-09 10:16 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 14:57 [PATCH 0/2] Re-raise irq_work lost during Xen suspend Julian Vetter
2026-11-06 15:01 ` [PATCH 1/2] irq_work: Add irq_work_raise_pending() Julian Vetter
2026-11-06 15:01 ` [PATCH 2/2] xen/manage: Re-raise pending irq_work after suspend Julian Vetter
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 [this message]
2026-11-09 10:56 ` Adrian Hunter
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=1fb98f79-183c-4144-aaac-45a437ff2d32@outer-limits.org \
--to=julian@outer-limits.org \
--cc=adrian.hunter@intel.com \
--cc=bigeasy@linutronix.de \
--cc=jgross@suse.com \
--cc=jiayuan.chen@linux.dev \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=oleksandr_tyshchenko@epam.com \
--cc=peterz@infradead.org \
--cc=sstabellini@kernel.org \
--cc=tglx@kernel.org \
--cc=vineeth@bitbyteword.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.