Hello, (2015/02/09 12:29), Baoquan He wrote:> On 02/09/15 at 12:22pm, HATAYAMA Daisuke wrote: >> From: Baoquan He <bhe at redhat.com> >>> On 02/05/15 at 05:59pm, HATAYAMA Daisuke wrote: >>>> diff --git a/kernel/kexec.c b/kernel/kexec.c >>>> index 9a8a01a..0ecf252 100644 >>>> --- a/kernel/kexec.c >>>> +++ b/kernel/kexec.c >>>> @@ -84,6 +84,8 @@ struct resource crashk_low_res = { >>>> >>>> int kexec_should_crash(struct task_struct *p) >>>> { >>>> + if (crash_kexec_post_notifiers) >>>> + return 0; >>>> if (in_interrupt() || !p->pid || is_global_init(p) || panic_on_oops) >>>> return 1; >>> >>> What if these two conditions !p->pid || is_global_init(p) are satisfied? >>> Seems the behavious is changed. >>> >> >> Please further follow do_exit() path. For each condition, there are >> the corresponding panic() calls. In summary: >> >> oops_end >> 1) panic() for in_interrupt() >> 2) panic() for panic_on_oops >> do_exit >> 3) panic() for !p->pid (idle task) >> exit_notify >> forget_original_parent >> find_child_reaper >> 4) panic() for p->pid == 1 (init task) > > Yes, all conditions have been covered. > > So this patch is necessary, ACK it. Thanks > > Acked-by: Baoquan He <bhe at redhat.com> Thanks for the patch! I tested it in following cases on x86_64 and it worked well; my panic notifier was called, then 2nd kernel booted. - Null pointer dereference in each context of - hard IRQ - pid == 0 - pid == 1 - others with panic_on_oops=1 - Zero-divide in the context of normal process (panic_on_oops=1) Tested-by: Hidehiro Kawai <hidehiro.kawai.ez at hitachi.com> -- Hidehiro Kawai Hitachi, Yokohama Research Laboratory