• Douglas Anderson's avatar
    kgdb: don't use a notifier to enter kgdb at panic; call directly · 7d92bda2
    Douglas Anderson authored
    Right now kgdb/kdb hooks up to debug panics by registering for the panic
    notifier.  This works OK except that it means that kgdb/kdb gets called
    _after_ the CPUs in the system are taken offline.  That means that if
    anything important was happening on those CPUs (like something that might
    have contributed to the panic) you can't debug them.
    
    Specifically I ran into a case where I got a panic because a task was
    "blocked for more than 120 seconds" which was detected on CPU 2.  I nicely
    got shown stack traces in the kernel log for all CPUs including CPU 0,
    which was running 'PID: 111 Comm: kworker/0:1H' and was in the middle of
    __mmc_switch().
    
    I then ended up at the kdb prompt where switched over to kgdb to try to
    look at local variables of the process on CPU 0.  I found that I couldn't.
    Digging more, I found that I had no info on any tasks running on CPUs
    other than CPU 2 and that asking kdb for help showed me "Error: no saved
    data for this cpu".  This was because all the CPUs were offline.
    
    Let's move the entry of kdb/kgdb to a direct call from panic() and stop
    using the generic notifier.  Putting a direct call in allows us to order
    things more properly and it also doesn't seem like we're breaking any
    abstractions by calling into the debugger from the panic function.
    
    Daniel said:
    
    : This patch changes the way kdump and kgdb interact with each other.
    : However it would seem rather odd to have both tools simultaneously armed
    : and, even if they were, the user still has the option to use panic_timeout
    : to force a kdump to happen.  Thus I think the change of order is
    : acceptable.
    
    Link: http://lkml.kernel.org/r/20190703170354.217312-1-dianders@chromium.orgSigned-off-by: default avatarDouglas Anderson <dianders@chromium.org>
    Reviewed-by: default avatarDaniel Thompson <daniel.thompson@linaro.org>
    Cc: Jason Wessel <jason.wessel@windriver.com>
    Cc: Kees Cook <keescook@chromium.org>
    Cc: Borislav Petkov <bp@suse.de>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: Feng Tang <feng.tang@intel.com>
    Cc: YueHaibing <yuehaibing@huawei.com>
    Cc: Sergey Senozhatsky <sergey.senozhatsky.work@gmail.com>
    Cc: "Steven Rostedt (VMware)" <rostedt@goodmis.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    7d92bda2
debug_core.c 26.3 KB