From: Baoquan He <bhe@redhat.com>
To: kexec@lists.infradead.org
Subject: [PATCH V3] panic: Move panic_print before kmsg dumpers
Date: Sat, 22 Jan 2022 18:31:21 +0800 [thread overview]
Message-ID: <20220122103121.GB2596@MiWiFi-R3L-srv> (raw)
In-Reply-To: <c7796467-ee32-942f-6011-860a3600f4ef@igalia.com>
On 01/21/22 at 10:17am, Guilherme G. Piccoli wrote:
> Hi Baoquan , thanks again for your prompt reply!
> Comments inline below:
>
>
> On 20/01/2022 23:31, Baoquan He wrote:
> > [...]
> >> OK, I'll try to be really clear, hopefully I can explain the use case in
> >> better and simpler words. First of all, I wouldn't call it a corner case
> >> - it's just a valid use case that, in my opinion, should be allowed. Why
> >> not, right? Kernel shouldn't push policy on users, we should instead let
> >> the users decide how to use the tools/options.
> >
> > Agree, sorry about my wrong expression.
>
> No need to be sorry at all! And if you indeed consider that a corner
> case, feel free to express that and we should take it into account =)
> Your opinion is much appreciated!
From my old POV, I took pstore as a necessity on handheld devices or
embeded system, e.g on Andriod. In that case, reserving crashkernel
memory to enable kdump to save kernel log, it sounds not so
cost-effective, since memory on those systems is usually not big.
I am also interested in any new use case where people deploy these
and why it's needed, to widen my view.
>
> >
> > OK, pstore via kmsg_dump is first option, then fallback to kdump.
> > This is what I suggested at below. This is what panic notifier has done
> > at below. I think both of them are similar, thus should take the same
> > way to handle.
> >
> > void panic()
> > {
> >1 if (!_crash_kexec_post_notifiers && !panic_print) {
> >2 __crash_kexec(NULL);
> >3 smp_send_stop();
> >4 } else {
> >5 crash_smp_send_stop();
> >6 }
> >
> >8 atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
> >9 panic_print_sys_info(false);
> >10 kmsg_dump(KMSG_DUMP_PANIC);
> >11 if (_crash_kexec_post_notifiers || panic_print)
> >12 __crash_kexec(NULL);
> > ...
> > debug_locks_off();
> > console_flush_on_panic(CONSOLE_FLUSH_PENDING);
> >
> > panic_print_sys_info(true);
> > ......
> > }
> >[...]
> > I don't get. Why it has to *require* users to make use of
> > "crash_kexec_post_notifiers" in order to use "panic_print"?
> > To enable panic notifiers and panic_print, we need add below parameter
> > to kernel cmdline separately.
> >
> > crash_kexec_post_notifiers=1
> > panic_print=0x7f
> >
> > With above code, we have:
> > 1) None specified in cmdline, only kdump enabled.
> > Crash dump will work to get vmcore.
> > 2) crash_kexec_post_notifiers=1 , kdump enabled
> > panic_notifers are executed, then crash dump
> > 3) panic_print=0x7f, kdump enabled,
> > Panic_print get system info printed, then crash dump
> > 4) crash_kexec_post_notifiers=1 panic_print=0x7f, kdump enabled
> > panic_notifers are executed firstly, then panic_print, at last crash dump
> >
> > Here I don't list the no kdump enabled case. Please help point out if I
> > misunderstood anything.
>
> OK, this is a really great summary list of the possible cases, thanks
> for that. I might be wrong here, this code is a bit confusing for
> me...so I put line numbers in your code and we can discuss based on that.
>
> Case (1) - Line L2 is reached, we jump to the kdump kernel, right?
> Case (2) - Line L5 and lines L8->L12 executed, correct?
>
> Case (3) - I don't understand this case! If kdump is enabled and
> panic_print as well, we execute Line L2 right? If that's not the case,
> then we jump to kdump kernel at line L12, but that means L8 was
> executed, the notifiers list. Right?
>
> So, how is it possible in your code to execute
> "panic_print_sys_info(false);" and then jump to kdump *without* reaching L8?
>
> I apologize in advance if I'm silly and it's obvious - I guess I won't
> get the C-programmer-prize of the year anyway heheh
It's my bad. My thought is panic_print and kmsg_dump can be coupled, but
they should decouple with panic_notifier. When panic_print is enabled,
we do not expect to execute panic_notifier? My personal opinion.
I missed the change at line 8, sorry for the caused misunderstanding.
Now the chance of holding C-programmer-prize of the year comes back
again.
void panic()
{
1 if (!_crash_kexec_post_notifiers && !panic_print) {
2 __crash_kexec(NULL);
3 smp_send_stop();
4 } else {
5 crash_smp_send_stop();
6 }
if (_crash_kexec_post_notifiers)
8 atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
9 panic_print_sys_info(false);
10 kmsg_dump(KMSG_DUMP_PANIC);
11 if (_crash_kexec_post_notifiers || panic_print)
12 __crash_kexec(NULL);
...
debug_locks_off();
console_flush_on_panic(CONSOLE_FLUSH_PENDING);
panic_print_sys_info(true);
......
}
>
>
> >> Sure, I'll rename "after_kmsg_dumpers" to "console_flush" in next
> >> iteration, although my nerd side won't be so happy ;-)
> >
> > No offence at all. My wife always call me nerd. Sorry about that.
>
> No offense taken, and no need to be sorry - we're cool!
> I got the joke =D
>
> And the variable name suggestion was indeed good.
>
WARNING: multiple messages have this Message-ID (diff)
From: Baoquan He <bhe@redhat.com>
To: "Guilherme G. Piccoli" <gpiccoli@igalia.com>
Cc: Petr Mladek <pmladek@suse.com>,
linux-kernel@vger.kernel.org, akpm@linux-foundation.org,
kernel@gpiccoli.net, senozhatsky@chromium.org,
rostedt@goodmis.org, john.ogness@linutronix.de,
feng.tang@intel.com, kexec@lists.infradead.org,
dyoung@redhat.com, keescook@chromium.org, anton@enomsg.org,
ccross@android.com, tony.luck@intel.com
Subject: Re: [PATCH V3] panic: Move panic_print before kmsg dumpers
Date: Sat, 22 Jan 2022 18:31:21 +0800 [thread overview]
Message-ID: <20220122103121.GB2596@MiWiFi-R3L-srv> (raw)
In-Reply-To: <c7796467-ee32-942f-6011-860a3600f4ef@igalia.com>
On 01/21/22 at 10:17am, Guilherme G. Piccoli wrote:
> Hi Baoquan , thanks again for your prompt reply!
> Comments inline below:
>
>
> On 20/01/2022 23:31, Baoquan He wrote:
> > [...]
> >> OK, I'll try to be really clear, hopefully I can explain the use case in
> >> better and simpler words. First of all, I wouldn't call it a corner case
> >> - it's just a valid use case that, in my opinion, should be allowed. Why
> >> not, right? Kernel shouldn't push policy on users, we should instead let
> >> the users decide how to use the tools/options.
> >
> > Agree, sorry about my wrong expression.
>
> No need to be sorry at all! And if you indeed consider that a corner
> case, feel free to express that and we should take it into account =)
> Your opinion is much appreciated!
From my old POV, I took pstore as a necessity on handheld devices or
embeded system, e.g on Andriod. In that case, reserving crashkernel
memory to enable kdump to save kernel log, it sounds not so
cost-effective, since memory on those systems is usually not big.
I am also interested in any new use case where people deploy these
and why it's needed, to widen my view.
>
> >
> > OK, pstore via kmsg_dump is first option, then fallback to kdump.
> > This is what I suggested at below. This is what panic notifier has done
> > at below. I think both of them are similar, thus should take the same
> > way to handle.
> >
> > void panic()
> > {
> >1 if (!_crash_kexec_post_notifiers && !panic_print) {
> >2 __crash_kexec(NULL);
> >3 smp_send_stop();
> >4 } else {
> >5 crash_smp_send_stop();
> >6 }
> >
> >8 atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
> >9 panic_print_sys_info(false);
> >10 kmsg_dump(KMSG_DUMP_PANIC);
> >11 if (_crash_kexec_post_notifiers || panic_print)
> >12 __crash_kexec(NULL);
> > ...
> > debug_locks_off();
> > console_flush_on_panic(CONSOLE_FLUSH_PENDING);
> >
> > panic_print_sys_info(true);
> > ......
> > }
> >[...]
> > I don't get. Why it has to *require* users to make use of
> > "crash_kexec_post_notifiers" in order to use "panic_print"?
> > To enable panic notifiers and panic_print, we need add below parameter
> > to kernel cmdline separately.
> >
> > crash_kexec_post_notifiers=1
> > panic_print=0x7f
> >
> > With above code, we have:
> > 1) None specified in cmdline, only kdump enabled.
> > Crash dump will work to get vmcore.
> > 2) crash_kexec_post_notifiers=1 , kdump enabled
> > panic_notifers are executed, then crash dump
> > 3) panic_print=0x7f, kdump enabled,
> > Panic_print get system info printed, then crash dump
> > 4) crash_kexec_post_notifiers=1 panic_print=0x7f, kdump enabled
> > panic_notifers are executed firstly, then panic_print, at last crash dump
> >
> > Here I don't list the no kdump enabled case. Please help point out if I
> > misunderstood anything.
>
> OK, this is a really great summary list of the possible cases, thanks
> for that. I might be wrong here, this code is a bit confusing for
> me...so I put line numbers in your code and we can discuss based on that.
>
> Case (1) - Line L2 is reached, we jump to the kdump kernel, right?
> Case (2) - Line L5 and lines L8->L12 executed, correct?
>
> Case (3) - I don't understand this case! If kdump is enabled and
> panic_print as well, we execute Line L2 right? If that's not the case,
> then we jump to kdump kernel at line L12, but that means L8 was
> executed, the notifiers list. Right?
>
> So, how is it possible in your code to execute
> "panic_print_sys_info(false);" and then jump to kdump *without* reaching L8?
>
> I apologize in advance if I'm silly and it's obvious - I guess I won't
> get the C-programmer-prize of the year anyway heheh
It's my bad. My thought is panic_print and kmsg_dump can be coupled, but
they should decouple with panic_notifier. When panic_print is enabled,
we do not expect to execute panic_notifier? My personal opinion.
I missed the change at line 8, sorry for the caused misunderstanding.
Now the chance of holding C-programmer-prize of the year comes back
again.
void panic()
{
1 if (!_crash_kexec_post_notifiers && !panic_print) {
2 __crash_kexec(NULL);
3 smp_send_stop();
4 } else {
5 crash_smp_send_stop();
6 }
if (_crash_kexec_post_notifiers)
8 atomic_notifier_call_chain(&panic_notifier_list, 0, buf);
9 panic_print_sys_info(false);
10 kmsg_dump(KMSG_DUMP_PANIC);
11 if (_crash_kexec_post_notifiers || panic_print)
12 __crash_kexec(NULL);
...
debug_locks_off();
console_flush_on_panic(CONSOLE_FLUSH_PENDING);
panic_print_sys_info(true);
......
}
>
>
> >> Sure, I'll rename "after_kmsg_dumpers" to "console_flush" in next
> >> iteration, although my nerd side won't be so happy ;-)
> >
> > No offence at all. My wife always call me nerd. Sorry about that.
>
> No offense taken, and no need to be sorry - we're cool!
> I got the joke =D
>
> And the variable name suggestion was indeed good.
>
next prev parent reply other threads:[~2022-01-22 10:31 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-14 18:30 [PATCH V3] panic: Move panic_print before kmsg dumpers Guilherme G. Piccoli
2022-01-14 18:30 ` Guilherme G. Piccoli
2022-01-17 3:33 ` Baoquan He
2022-01-17 3:33 ` Baoquan He
2022-01-17 6:13 ` Baoquan He
2022-01-17 6:13 ` Baoquan He
2022-01-17 12:58 ` Guilherme G. Piccoli
2022-01-17 12:58 ` Guilherme G. Piccoli
2022-01-19 7:13 ` Baoquan He
2022-01-19 7:13 ` Baoquan He
2022-01-19 12:57 ` Guilherme G. Piccoli
2022-01-19 12:57 ` Guilherme G. Piccoli
2022-01-19 15:48 ` Petr Mladek
2022-01-19 15:48 ` Petr Mladek
2022-01-19 16:03 ` Guilherme G. Piccoli
2022-01-19 16:03 ` Guilherme G. Piccoli
2022-01-20 9:39 ` Petr Mladek
2022-01-20 9:39 ` Petr Mladek
2022-01-20 15:51 ` Guilherme G. Piccoli
2022-01-20 15:51 ` Guilherme G. Piccoli
2022-01-20 8:51 ` Baoquan He
2022-01-20 8:51 ` Baoquan He
2022-01-20 21:36 ` Guilherme G. Piccoli
2022-01-20 21:36 ` Guilherme G. Piccoli
2022-01-21 2:31 ` Baoquan He
2022-01-21 2:31 ` Baoquan He
2022-01-21 13:17 ` Guilherme G. Piccoli
2022-01-21 13:17 ` Guilherme G. Piccoli
2022-01-22 10:31 ` Baoquan He [this message]
2022-01-22 10:31 ` Baoquan He
2022-01-22 13:49 ` Guilherme G. Piccoli
2022-01-22 13:49 ` Guilherme G. Piccoli
2022-01-26 3:29 ` Baoquan He
2022-01-26 3:29 ` Baoquan He
2022-01-21 15:00 ` Michael Kelley
2022-01-21 15:00 ` Michael Kelley (LINUX)
2022-01-22 4:33 ` Baoquan He
2022-01-22 4:33 ` Baoquan He
2022-01-24 16:57 ` Michael Kelley
2022-01-24 16:57 ` Michael Kelley (LINUX)
2022-01-26 11:51 ` Petr Mladek
2022-01-26 11:51 ` Petr Mladek
2022-01-29 8:00 ` Baoquan He
2022-01-29 8:00 ` Baoquan He
2022-02-02 17:43 ` Michael Kelley
2022-02-02 17:43 ` Michael Kelley (LINUX)
2022-02-07 8:33 ` Baoquan He
2022-02-07 8:33 ` Baoquan He
2022-01-28 9:03 ` Baoquan He
2022-01-28 9:03 ` Baoquan He
2022-01-28 18:24 ` Michael Kelley
2022-01-28 18:24 ` Michael Kelley (LINUX)
2022-01-29 7:42 ` Baoquan He
2022-01-29 7:42 ` Baoquan He
2022-01-19 18:38 ` Petr Mladek
2022-01-19 18:38 ` Petr Mladek
2022-01-19 19:51 ` Guilherme G. Piccoli
2022-01-19 19:51 ` Guilherme G. Piccoli
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=20220122103121.GB2596@MiWiFi-R3L-srv \
--to=bhe@redhat.com \
--cc=kexec@lists.infradead.org \
/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.