mirror of
https://github.com/torvalds/linux.git
synced 2026-09-11 20:13:02 +02:00
printk/nbcon: Change nbcon_irq_work to IRQ_WORK_LAZY
Change the nbcon_irq_work to be IRQ_WORK_LAZY, thus not raising
an IRQ upon irq_work queuing. The irq_work is then handled on the
next kernel tick. This additional delay is acceptable because
nbcon_irq_work is only responsible for non-emergency deferred
printing, which is delayed anyway. This has the benefit of not
needing to raise an IRQ for each printk() call.
On a side note, the Tegra20 and Tegra30 platforms can hang if an
irq_work IRQ is raised while entering cpuidle states. This problem
was reproducible by calling printk() while entering cpuidle. So
this change also provides a workaround for these platforms (as long
as they are not running tickless).
Link: https://lore.kernel.org/lkml/f3757a75-0ba1-4558-bf57-f19ab7e59a4c@nvidia.com
Fixes: 76f258bf3f ("printk: nbcon: Introduce printer kthreads")
Signed-off-by: John Ogness <john.ogness@linutronix.de>
Reviewed-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Petr Mladek <pmladek@suse.com>
Tested-by: Jon Hunter <jonathanh@nvidia.com>
Link: https://patch.msgid.link/20260901093245.344455-3-john.ogness@linutronix.de
Signed-off-by: Petr Mladek <pmladek@suse.com>
This commit is contained in:
parent
0433632bbe
commit
560f4deda3
|
|
@ -1782,7 +1782,7 @@ bool nbcon_alloc(struct console *con)
|
|||
}
|
||||
|
||||
rcuwait_init(&con->rcuwait);
|
||||
init_irq_work(&con->irq_work, nbcon_irq_work);
|
||||
con->irq_work = IRQ_WORK_INIT_LAZY(nbcon_irq_work);
|
||||
atomic_long_set(&ACCESS_PRIVATE(con, nbcon_prev_seq), -1UL);
|
||||
nbcon_state_set(con, &state);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user