Commit 0104cd68 authored by Michael Ellerman's avatar Michael Ellerman Committed by Benjamin Herrenschmidt

powerpc/xmon: Fiddle xmon_depth_to_print logic in xmon_show_stack()

Currently xmon_depth_to_print is static and global, but it's only
ever used in xmon_show_stack().

At least with a modern compiler it's inlined, so there's no point
in it being static, we could #define it but it's only used in one
place.

By reworking the logic we can drop count and just decrement the
max value as a loop counter. Also switch to a while loop so we
actually print no more than 64 frames as you'd expect based on the
variable name.
Signed-off-by: default avatarMichael Ellerman <michael@ellerman.id.au>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent c4de3809
...@@ -1281,21 +1281,19 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp, ...@@ -1281,21 +1281,19 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp,
catch_memory_errors = 0; catch_memory_errors = 0;
} }
static int xmon_depth_to_print = 64;
#define LRSAVE_OFFSET (STACK_FRAME_LR_SAVE * sizeof(unsigned long)) #define LRSAVE_OFFSET (STACK_FRAME_LR_SAVE * sizeof(unsigned long))
#define MARKER_OFFSET (STACK_FRAME_MARKER * sizeof(unsigned long)) #define MARKER_OFFSET (STACK_FRAME_MARKER * sizeof(unsigned long))
static void xmon_show_stack(unsigned long sp, unsigned long lr, static void xmon_show_stack(unsigned long sp, unsigned long lr,
unsigned long pc) unsigned long pc)
{ {
int max_to_print = 64;
unsigned long ip; unsigned long ip;
unsigned long newsp; unsigned long newsp;
unsigned long marker; unsigned long marker;
int count = 0;
struct pt_regs regs; struct pt_regs regs;
do { while (max_to_print--) {
if (sp < PAGE_OFFSET) { if (sp < PAGE_OFFSET) {
if (sp != 0) if (sp != 0)
printf("SP (%lx) is in userspace\n", sp); printf("SP (%lx) is in userspace\n", sp);
...@@ -1366,7 +1364,7 @@ static void xmon_show_stack(unsigned long sp, unsigned long lr, ...@@ -1366,7 +1364,7 @@ static void xmon_show_stack(unsigned long sp, unsigned long lr,
break; break;
sp = newsp; sp = newsp;
} while (count++ < xmon_depth_to_print); }
} }
static void backtrace(struct pt_regs *excp) static void backtrace(struct pt_regs *excp)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment