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: 8+ 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-03 2:44 ` [RFC PATCH v2 2/5] mm/show_mem: Avoid blocking on zone->lock during Oops or panic Aaron Tomlin
2026-11-03 2:44 ` [RFC PATCH v2 3/5] timers: Avoid blocking on hrtimer_cpu_base lock " Aaron Tomlin
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-03 2:44 ` [RFC PATCH v2 5/5] panic, crash_core, sys_info: Introduce crash_kexec_in_memory_sys_info Aaron Tomlin
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 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®