Skip to content

Commit

Permalink
kdb: don't play with console_loglevel
Browse files Browse the repository at this point in the history
Print the stack trace with KERN_EMERG - it should be always visible.

Playing with console_loglevel is a bad idea as there may be more messages
printed than wanted.  Also the stack trace might be not printed at all if
printk() was deferred and console_loglevel was raised back before the
trace got flushed.

Unfortunately, after rebasing on commit 2277b49 ("kdb: Fix stack
crawling on 'running' CPUs that aren't the master"), kdb_show_stack() uses
now kdb_dump_stack_on_cpu(), which for now won't be converted as it uses
dump_stack() instead of show_stack().

Convert for now the branch that uses show_stack() and remove
console_loglevel exercise from that case.

Signed-off-by: Dmitry Safonov <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Reviewed-by: Douglas Anderson <[email protected]>
Acked-by: Daniel Thompson <[email protected]>
Cc: Jason Wessel <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
0x7f454c46 authored and torvalds committed Jun 9, 2020
1 parent 3f05437 commit 77819da
Showing 1 changed file with 8 additions and 7 deletions.
15 changes: 8 additions & 7 deletions kernel/debug/kdb/kdb_bt.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,17 +21,18 @@

static void kdb_show_stack(struct task_struct *p, void *addr)
{
int old_lvl = console_loglevel;

console_loglevel = CONSOLE_LOGLEVEL_MOTORMOUTH;
kdb_trap_printk++;

if (!addr && kdb_task_has_cpu(p))
if (!addr && kdb_task_has_cpu(p)) {
int old_lvl = console_loglevel;

console_loglevel = CONSOLE_LOGLEVEL_MOTORMOUTH;
kdb_dump_stack_on_cpu(kdb_process_cpu(p));
else
show_stack(p, addr);
console_loglevel = old_lvl;
} else {
show_stack_loglvl(p, addr, KERN_EMERG);
}

console_loglevel = old_lvl;
kdb_trap_printk--;
}

Expand Down

0 comments on commit 77819da

Please sign in to comment.