From: Aaron Tomlin <atomlin@atomlin.com>
To: pmladek@suse.com, john.ogness@linutronix.de, rostedt@goodmis.org,
senozhatsky@chromium.org, mingo@redhat.com, peterz@infradead.org,
juri.lelli@redhat.com, vincent.guittot@linaro.org,
dietmar.eggemann@arm.com, bsegall@google.com, mgorman@suse.de,
vschneid@redhat.com, kprateek.nayak@amd.com,
akpm@linux-foundation.org, baoquan.he@linux.dev, rppt@kernel.org,
pasha.tatashin@soleen.com, pratyush@kernel.org,
ruirui.yang@linux.dev, david@kernel.org, ljs@kernel.org,
liam@infradead.org, vbabka@kernel.org, surenb@google.com,
mhocko@suse.com, kees@kernel.org, anna-maria@linutronix.de,
frederic@kernel.org, tglx@kernel.org, mhiramat@kernel.org,
mathieu.desnoyers@efficios.com, brendan.jackman@linux.dev,
hannes@cmpxchg.org, ziy@nvidia.com, bigeasy@linutronix.de,
clrkwllms@kernel.org
Cc: linux-kernel@vger.kernel.org, kexec@lists.infradead.org,
linux-mm@kvack.org, linux-trace-kernel@vger.kernel.org,
linux-rt-devel@lists.linux.dev
Subject: [RFC PATCH v2 0/5] panic, crash_core, sys_info: Introduce crash_kexec_in_memory_sys_info
Date: Mon, 2 Nov 2026 21:44:48 -0500 [thread overview]
Message-ID: <20261103024453.922373-1-atomlin@atomlin.com> (raw)
In modern fleet environments, capturing a full multi-gigabyte vmcore via
kdump can occasionally fail or be intentionally skipped due to storage,
network, or encryption constraints. In these scenarios, the extracted
dmesg buffer (e.g. vmcore-dmesg.txt) is often the sole artefact
available for post-mortem triage.
Currently, appending supplemental system state (such as memory usage, held
locks, active timers, task states, or ftrace buffers) via panic_print prior
to kdump requires enabling crash_kexec_post_notifiers. Doing so exposes the
crash path to registered panic notifiers (vastly increasing the risk of
hanging or deadlocking) and forces panic_print output to be flushed
synchronously to physical consoles. On a slow serial console or IPMI
Serial-over-LAN (e.g. 115200 baud), flushing comprehensive sys_info()
output (e.g. tasks or stacktraces) can exceed 10 seconds, allowing the
hardware timer to expire and reset the system before kdump can initialise.
Furthermore, on large systems, high-volume telemetry can wrap the printk
ring buffer and overwrite the initial Oops, BUG, or panic stack trace.
This series introduces the "crash_kexec_in_memory_sys_info" kernel
command-line parameter to decouple in-memory telemetry collection from
both panic notifiers and physical console flushing when kdump is active:
1. Fixes duplicate and dropped all-CPU backtraces when SYS_INFO_ALL_BT
is configured in panic_print across early SMP shutdown and
__sys_info().
2. Avoids spinning indefinitely on zone->lock in show_free_areas()
during NMI, Oops, or panic contexts by falling back to non-blocking
trylock acquisitions and skipping contended zones.
3. Avoids blocking on timekeeping seqcounts and hrtimer_cpu_base locks
in sysrq_timer_list_show() and print_active_timers() during NMI,
Oops, or panic contexts.
4. Adds printk console flush suppression across nbcon, legacy
consoles, and klogd, alongside ring buffer tail pinning so
pre-crash records can still be recycled while protecting the
initial crash output from being overwritten by subsequent telemetry
or ftrace dumps.
5. Introduces crash_kexec_in_memory_sys_info and invokes
panic_in_memory_sys_info() from __crash_kexec() prior to
machine_crash_shutdown() when crash_kexec_post_notifiers is not
enabled. It also marks the start of crash diagnostics across
bust_spinlocks(), __report_bug(), oops_enter(), and vpanic(), and
reorders __sys_info() so compact, high-signal dumps (SYS_INFO_MEM,
SYS_INFO_LOCKS, SYS_INFO_TIMERS, SYS_INFO_BLOCKED_TASKS) execute
before high-volume dumps (SYS_INFO_ALL_BT, SYS_INFO_TASKS,
SYS_INFO_FTRACE).
Changes since v1:
- Split the single patch into a 5-patch series separating prerequisite
panic all-CPU backtrace fixes, crash-time lock safety in show_mem()
and timer_list, printk/tracing infrastructure, and the crash_kexec
integration
- Moved in-memory sys_info() collection from vpanic() into
__crash_kexec() via panic_in_memory_sys_info() with local interrupts
disabled so all crash_kexec() entry points (including direct Oops/die
paths prior to vpanic()) are covered, and kept console flush
suppression and tail pinning active through machine_crash_shutdown()
and machine_kexec() unless machine_kexec() returns
- Replaced unconditional ring buffer tail freezing with crash-start
sequence pinning (printk_mark_panic_start(),
printk_clear_panic_start(), and printk_is_tail_full()), allowing
pre-crash records to be recycled while preserving the initial
Oops/panic trace, finalising the last record when full, and stopping
ftrace_dump_one() before consuming unprinted trace entries
- Extended printk_suppress_console_flush() to cover nbcon atomic
flushes and kthreads, legacy console_flush_one_record() and kthreads,
and wake_up_klogd(), and dropped unnecessary EXPORT_SYMBOL_GPL
exports
- Added crash-context trylock and NMI-safe timekeeping handling in
show_free_areas(), sysrq_timer_list_show(), and
print_active_timers(), and fixed duplicate/dropped all-CPU backtraces
when SYS_INFO_ALL_BT is used during panic
- Link to v1: https://lore.kernel.org/lkml/20260916201546.661384-1-atomlin@atomlin.com/
Aaron Tomlin (5):
panic, sys_info: Fix duplicate and dropped all-CPU backtraces in panic
mm/show_mem: Avoid blocking on zone->lock during Oops or panic
timers: Avoid blocking on hrtimer_cpu_base lock during Oops or panic
printk, tracing: Support console flush suppression and tail pinning
panic, crash_core, sys_info: Introduce crash_kexec_in_memory_sys_info
.../admin-guide/kernel-parameters.txt | 11 ++
include/linux/panic.h | 2 +
include/linux/printk.h | 27 +++
include/linux/sched.h | 3 +
include/linux/sys_info.h | 4 +
kernel/crash_core.c | 6 +
kernel/exit.c | 10 ++
kernel/fork.c | 3 +
kernel/panic.c | 87 ++++++++-
kernel/printk/internal.h | 4 +
kernel/printk/nbcon.c | 11 +-
kernel/printk/printk.c | 29 ++-
kernel/printk/printk_ringbuffer.c | 168 +++++++++++++++++-
kernel/time/timer_list.c | 13 +-
kernel/trace/trace.c | 20 ++-
lib/bug.c | 18 +-
lib/bust_spinlocks.c | 22 ++-
lib/sys_info.c | 33 ++--
mm/show_mem.c | 15 +-
19 files changed, 447 insertions(+), 39 deletions(-)
--
2.55.0
next reply other threads:[~2026-11-03 2:45 UTC|newest]
Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-03 2:44 Aaron Tomlin [this message]
2026-11-03 2:44 ` [RFC PATCH v2 1/5] panic, sys_info: Fix duplicate and dropped all-CPU backtraces in panic Aaron Tomlin
2026-11-04 2:49 ` sashiko-bot
2026-11-03 2:44 ` [RFC PATCH v2 2/5] mm/show_mem: Avoid blocking on zone->lock during Oops or panic Aaron Tomlin
2026-11-04 2:49 ` sashiko-bot
2026-11-04 21:24 ` Aaron Tomlin
2026-11-03 2:44 ` [RFC PATCH v2 3/5] timers: Avoid blocking on hrtimer_cpu_base lock " Aaron Tomlin
2026-11-04 2:49 ` sashiko-bot
2026-11-03 2:44 ` [RFC PATCH v2 4/5] printk, tracing: Support console flush suppression and tail pinning Aaron Tomlin
2026-11-03 14:55 ` Steven Rostedt
2026-11-03 15:49 ` Aaron Tomlin
2026-11-04 2:49 ` sashiko-bot
2026-11-03 2:44 ` [RFC PATCH v2 5/5] panic, crash_core, sys_info: Introduce crash_kexec_in_memory_sys_info Aaron Tomlin
2026-11-04 2:49 ` sashiko-bot
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=20261103024453.922373-1-atomlin@atomlin.com \
--to=atomlin@atomlin.com \
--cc=akpm@linux-foundation.org \
--cc=anna-maria@linutronix.de \
--cc=baoquan.he@linux.dev \
--cc=bigeasy@linutronix.de \
--cc=brendan.jackman@linux.dev \
--cc=bsegall@google.com \
--cc=clrkwllms@kernel.org \
--cc=david@kernel.org \
--cc=dietmar.eggemann@arm.com \
--cc=frederic@kernel.org \
--cc=hannes@cmpxchg.org \
--cc=john.ogness@linutronix.de \
--cc=juri.lelli@redhat.com \
--cc=kees@kernel.org \
--cc=kexec@lists.infradead.org \
--cc=kprateek.nayak@amd.com \
--cc=liam@infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-rt-devel@lists.linux.dev \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=ljs@kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=mgorman@suse.de \
--cc=mhiramat@kernel.org \
--cc=mhocko@suse.com \
--cc=mingo@redhat.com \
--cc=pasha.tatashin@soleen.com \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=pratyush@kernel.org \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=ruirui.yang@linux.dev \
--cc=senozhatsky@chromium.org \
--cc=surenb@google.com \
--cc=tglx@kernel.org \
--cc=vbabka@kernel.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=ziy@nvidia.com \
/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.