From: Petr Mladek <pmladek@suse.com>
To: "Guilherme G. Piccoli" <gpiccoli@igalia.com>
Cc: Zack Rusin <zack.rusin@broadcom.com>,
Borislav Petkov <bp@alien8.de>,
Andrew Morton <akpm@linux-foundation.org>,
Baoquan He <baoquan.he@linux.dev>,
Mike Rapoport <rppt@kernel.org>,
Ajay Kaher <ajay.kaher@broadcom.com>,
Alexey Makhalov <alexey.makhalov@broadcom.com>,
Pasha Tatashin <pasha.tatashin@soleen.com>,
x86@kernel.org, Joel Granados <joel.granados@kernel.org>,
Thomas Gleixner <tglx@kernel.org>, Ingo Molnar <mingo@redhat.com>,
Dave Hansen <dave.hansen@linux.intel.com>,
"H. Peter Anvin" <hpa@zytor.com>,
virtualization@lists.linux.dev,
Dave Young <ruirui.yang@linux.dev>,
bcm-kernel-feedback-list@broadcom.com,
linux-kernel@vger.kernel.org,
John Ogness <john.ogness@linutronix.de>,
Steven Rostedt <rostedt@goodmis.org>,
Sergey Senozhatsky <senozhatsky@chromium.org>,
Pratyush Yadav <pratyush@kernel.org>, Kees Cook <kees@kernel.org>,
Jonathan Corbet <corbet@lwn.net>, Bo Gan <bo.gan@broadcom.com>,
Brennan Lamoreaux <brennan.lamoreaux@broadcom.com>,
kexec@lists.infradead.org, linux-doc@vger.kernel.org,
Maaz Mombasawala <maaz.mombasawala@broadcom.com>,
Shuah Khan <skhan@linuxfoundation.org>,
Randy Dunlap <rdunlap@infradead.org>,
Stephen Brennan <stephen.s.brennan@oracle.com>,
Michael Kelley <mhklinux@outlook.com>,
Ian Forbes <ian.forbes@broadcom.com>
Subject: Re: [PATCH v2 1/6] panic: Add a notifier chain for pre-kdump callbacks
Date: Tue, 20 Oct 2026 16:30:48 +0200 [thread overview]
Message-ID: <atd7GInNurGWLUha@pathway.suse.cz> (raw)
In-Reply-To: <atdYIxwz8ksYNty6@pathway.suse.cz>
On Tue 2026-10-20 14:01:43, Petr Mladek wrote:
> On Mon 2026-10-19 19:05:21, Guilherme G. Piccoli wrote:
> > On 28/09/2026 14:55, Zack Rusin wrote:
> > > Selected crash callbacks should not require running every panic notifier
> > > before kdump. Add a separate atomic chain with an at-most-once dispatch
> > > helper, and invoke it before panic reaches the kmsg dumpers.
> > >
> > > The helper permits another call from the crash path without repeating
> > > callbacks or recursing into them. Document that callbacks may run in NMI
> > > context, with other CPUs running and the kexec lock held.
> > >
> > > Link: https://lore.kernel.org/r/aquttpMVKX8e6zGB@pathway.suse.cz
> > > Signed-off-by: Zack Rusin <zack.rusin@broadcom.com>
> > > ---
> > > New in v2: separate pre-kdump chain, with a set-once dispatch guard.
> > >
> > > include/linux/panic_notifier.h | 3 +++
> > > kernel/panic.c | 26 ++++++++++++++++++++++++++
> > > 2 files changed, 29 insertions(+)
> > >
> > > diff --git a/include/linux/panic_notifier.h b/include/linux/panic_notifier.h
> > > index 41e32483d7a7..3ad390764a41 100644
> > > --- a/include/linux/panic_notifier.h
> > > +++ b/include/linux/panic_notifier.h
> > > @@ -6,6 +6,9 @@
> > > #include <linux/types.h>
> > >
> > > extern struct atomic_notifier_head panic_notifier_list;
> > > +extern struct atomic_notifier_head panic_pre_kdump_list;
> > > +
> > > +void panic_notify_pre_kdump(char *msg);
> > >
> > > extern bool crash_kexec_post_notifiers;
> > >
> > > diff --git a/kernel/panic.c b/kernel/panic.c
> > > index 213725b612aa..d78e90abb192 100644
> > > --- a/kernel/panic.c
> > > +++ b/kernel/panic.c
> > > @@ -82,6 +82,10 @@ ATOMIC_NOTIFIER_HEAD(panic_notifier_list);
> > >
> > > EXPORT_SYMBOL(panic_notifier_list);
> > >
> > > +struct atomic_notifier_head panic_pre_kdump_list =
> > > + ATOMIC_NOTIFIER_INIT(panic_pre_kdump_list);
> > > +EXPORT_SYMBOL_GPL(panic_pre_kdump_list);
> > > +
> > > static void panic_print_deprecated(void)
> > > {
> > > pr_info_once("Kernel: The 'panic_print' parameter is now deprecated. Please use 'panic_sys_info' and 'panic_console_replay' instead.\n");
> > > @@ -567,6 +571,27 @@ static void panic_other_cpus_shutdown(bool crash_kexec)
> > > crash_smp_send_stop();
> > > }
> > >
> > > +/**
> > > + * panic_notify_pre_kdump - invoke selected callbacks before kdump
> > > + * @msg: Panic message, or NULL for direct crash-kexec entry
> > > + *
> > > + * Dispatch at most once per boot, including recursive entry. Callbacks run
> > > + * with interrupts disabled, possibly in NMI context, before other CPUs have
> > > + * necessarily stopped. The kexec lock may be held. They must not sleep,
> > > + * allocate, wait for other CPUs, or call into kexec management operations.
> > > + * The message is read-only and may only be used during the callback.
> > > + */
> > > +void panic_notify_pre_kdump(char *msg)
> > > +{
> > > + static atomic_t started = ATOMIC_INIT(0);
> > > + unsigned long flags;
> > > +
> > > + local_irq_save(flags);
> > > + if (!atomic_xchg(&started, 1))
>
> It is far from clear why this is needed. It would deserve a comment in
> the code and explanation in the commit message.
>
> Well, I am not even sure whether this synchronization is enough.
> If __crash_exec() and vpanic() are running in parallel on two CPUS
> then one path will skip the notifiers but it will not wait until
> they are finished.
>
> But I think that the problem is the explicitly called __crash_exec()
> is not synchronized against vpanic() in the first place. IMHO,
> it is an existing problem which probably should get fixed.
>
> > > + atomic_notifier_call_chain(&panic_pre_kdump_list, 0, msg);
> > > + local_irq_restore(flags);
> > > +}
> > > +
> > > /**
> > > * vpanic - halt the system
> > > * @fmt: The text string to print
> > > @@ -682,6 +707,7 @@ void vpanic(const char *fmt, va_list args)
> > >
> > > sys_info(panic_print);
> > >
> > > + panic_notify_pre_kdump(buf);
> > > kmsg_dump_desc(KMSG_DUMP_PANIC, buf);
> > >
> > > /*
> >
> > Hi Zack, thanks for trying to improve this conundrum called panic
> > notifiers heh
> >
> > I confess at first sight I got a bit confused, and only after reading
> > patch 1 and 2 twice, things made sense to me: you're hooking
> > __crash_kexec() directly!
> >
> > So, in my head, 2 things that would make sense upfront: merge patches #1
> > and #2, and comment a bit about it in the code.
>
> +1
>
> But honestly, the semantic and ordering of all the variables and
> functions is very complicated. It is very hard to follow and
> understand all the rules.
Warning: You might skip the first part about my confusion.
Maybe, I am the only one who is a bit lost this way.
My motivation is to do not repeat the mess which I saw in
the printk registration code. People added many features
there for over two decades. Each change made sense on its own.
But, for me, it was really hard to understand and distinguish
what were the wanted and unwanted effects.
I trying to understans why I am confused by the panic notifiers code.
There are several aspects:
1. I was involved in many mail threads where we discussed calling:
notifiers before/after kdump
but the variable "crash_kexec_post_notifiers" defines calling:
kdump before/after notifiers
It actually matches the code because __crash_kexec() is called
twice in vpanic() before and after the notifiers.
Sigh, it looks like a trivial mental switch. But it is not
that trivial when we though about splitting the notifiers
into more lists and discussed where to call them.
The discussion always was where to call notifiers and not where to
call kdump.
And we are also discussing about disabling notifiers. Not about
disabling kdump.
2. We call the new list "panic_pre_kdump" and this patchset calls
it in both vpanic() and __crash_kexec() code paths.
The name "pre_kdump" suggests that it is needed only when kdump
is called. But we want to call it in panic() even when
kdump is not called.
3. The new "pre_kdump" notifiers are called before stopping CPUs.
While the rest is called in the more safe environment
with stopped CPUs.
4. I am a bit confused by this patch set because it allows
dumping printk log before kdump. It does not fit with
my understanding of having "pre_kdump" list only for
the strictly needed operations.
5. There is the idea of splitting the remainig notifiers into
_safe and _unsafe lists, see
https://lore.kernel.org/r/atcjhe4329sYHWvZ@pathway.suse.cz
It would complicate the design even more. But it might help
with the endless war whether "crash_kexec_post_notifiers"
should be "true" or "false" by a platform-specific default.
I wonder how all this fits together.
Top-level look:
===============
Sigh, one problem is that the notifiers have different purpose:
1. Notify hypervisor (platform). This looks like a must-to-have.
2. Platform specific dump of printk messages. This is
nice-to-have. But note that we also have kmsg_dump API
for this, see kmsg_dump_desc().
3. Print extra info. Also this is nice-to-have.
Some is optional when kdump is created because it might be
read from there. Some can't be found in crash dump, e.g.
dumping lowlevel HW state.
In addition, there is sys_info() info API which allows to
dump state of various subsystems.
4. Some notifiers are smp-safe and some just a best effort
and more safe after disabling other CPUs.
In addition, I guess that it is better to call crash_kexec()
without stopping other CPUs because stopping is not reliable
without NMI. And it would create extra noise in the backtrace.
And ???
Now, different people have different preferences but mainly:
+ the more safe kdump the better
+ the more safe reboot the better
+ the more info the better
Now, the question is how to satisfy the various requirements
and keep the design sane. We need a compromise but where.
Continue thinking...
Best Regards,
Petr
next prev parent reply other threads:[~2026-10-20 14:30 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-28 17:55 [PATCH v2 0/6] panic, x86/vmware: Preserve crash logs before kdump Zack Rusin
2026-09-28 17:55 ` [PATCH v2 1/6] panic: Add a notifier chain for pre-kdump callbacks Zack Rusin
2026-09-28 18:04 ` sashiko-bot
2026-10-19 22:05 ` Guilherme G. Piccoli
2026-10-20 12:01 ` Petr Mladek
2026-10-20 13:20 ` Petr Mladek
2026-10-20 14:30 ` Petr Mladek [this message]
2026-10-20 16:37 ` Petr Mladek
2026-10-20 19:23 ` Zack Rusin
2026-09-28 17:55 ` [PATCH v2 2/6] crash: Notify pre-kdump callbacks before switching kernels Zack Rusin
2026-09-28 18:08 ` sashiko-bot
2026-09-28 18:40 ` Zack Rusin
2026-10-19 10:47 ` John Ogness
2026-10-20 12:10 ` Petr Mladek
2026-09-28 17:55 ` [PATCH v2 3/6] panic: Allow postponing pre-kdump notifiers Zack Rusin
2026-09-28 18:04 ` sashiko-bot
2026-10-19 22:07 ` Guilherme G. Piccoli
2026-10-20 12:28 ` Petr Mladek
2026-09-28 17:55 ` [PATCH v2 4/6] x86/vmware: Add a bounded pre-kdump log sender Zack Rusin
2026-09-28 18:07 ` sashiko-bot
2026-09-28 17:55 ` [PATCH v2 5/6] x86/vmware: Add the vmware_record_panic_msg sysctl Zack Rusin
2026-09-28 18:06 ` sashiko-bot
2026-09-28 17:55 ` [PATCH v2 6/6] x86/vmware: Report guest crashes after kmsg dumpers Zack Rusin
2026-09-28 18:03 ` sashiko-bot
2026-09-28 20:39 ` [PATCH v2 0/6] panic, x86/vmware: Preserve crash logs before kdump Bradley Morgan
2026-10-14 17:07 ` Zack Rusin
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=atd7GInNurGWLUha@pathway.suse.cz \
--to=pmladek@suse.com \
--cc=ajay.kaher@broadcom.com \
--cc=akpm@linux-foundation.org \
--cc=alexey.makhalov@broadcom.com \
--cc=baoquan.he@linux.dev \
--cc=bcm-kernel-feedback-list@broadcom.com \
--cc=bo.gan@broadcom.com \
--cc=bp@alien8.de \
--cc=brennan.lamoreaux@broadcom.com \
--cc=corbet@lwn.net \
--cc=dave.hansen@linux.intel.com \
--cc=gpiccoli@igalia.com \
--cc=hpa@zytor.com \
--cc=ian.forbes@broadcom.com \
--cc=joel.granados@kernel.org \
--cc=john.ogness@linutronix.de \
--cc=kees@kernel.org \
--cc=kexec@lists.infradead.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maaz.mombasawala@broadcom.com \
--cc=mhklinux@outlook.com \
--cc=mingo@redhat.com \
--cc=pasha.tatashin@soleen.com \
--cc=pratyush@kernel.org \
--cc=rdunlap@infradead.org \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=ruirui.yang@linux.dev \
--cc=senozhatsky@chromium.org \
--cc=skhan@linuxfoundation.org \
--cc=stephen.s.brennan@oracle.com \
--cc=tglx@kernel.org \
--cc=virtualization@lists.linux.dev \
--cc=x86@kernel.org \
--cc=zack.rusin@broadcom.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