[PATCH 0/2] sched: Introduce and use deferred WARNs in sched
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Date: 2026-06-23 14:27:06
Also in:
linux-arch, lkml, sched-ext
This is a follow-up to the netconsole lockup reported https://lore.kernel.org/all/20260610183621.3915271-1-vlad.wing@gmail.com/ (local) The idea is to use deferred printing for WARNs and use them in sched. I tried to use only where it looks that the rq lock acquired instead a plain s/WARN_ON/WARN_ON_DEFFERED which would be simpler. This unholy deferred mess can be removed once we don't have legacy consoles anymore _or_ force force_legacy_kthread=true. The initial report is against v6.16 and netconsole. The reported problem does not occur upstream since commit 7eab73b18630e ("netconsole: convert to NBCON console infrastructure") which is v7.0-rc1. Should this be rejected outright because the preferred sollution is to | - stick msg in buffer (lockless) | - print to atomic consoles (lockless) | - use irq_work to wake console kthreads (lockless) | - each kthread then tries to flush buffer to its own non-atomic console | in non-atomic context." then this means to force force_legacy_kthread=true. The threaded legacy printer is available since v6.12-rc1. It terms of stable fix, this could go back as of v6.12 stable and not earlier (in case we care). I tested this on a x86 box with 8250 and warning in put_prev_entity(). After it printed the initial warning, it dead-locked shortly after because systemd was writing to the kernel buffer it acquired the uart_port_lock then attempted to write lockdep report which required the same lock… Sebastian Andrzej Siewior (2): bug: Provide WARN_ON.*DEFERRED() macros for console deferred output sched: Use WARN_ON.*_DEFERRED() include/asm-generic/bug.h | 41 ++++++++++++++ kernel/sched/core.c | 78 +++++++++++++------------- kernel/sched/core_sched.c | 6 +- kernel/sched/cpudeadline.c | 6 +- kernel/sched/deadline.c | 62 ++++++++++----------- kernel/sched/ext.c | 110 ++++++++++++++++++------------------- kernel/sched/fair.c | 88 ++++++++++++++--------------- kernel/sched/rt.c | 36 ++++++------ kernel/sched/sched.h | 18 +++--- lib/bug.c | 16 +++++- 10 files changed, 257 insertions(+), 204 deletions(-) -- 2.53.0