powerpc/xmon: Fiddle xmon_depth_to_print logic in xmon_show_stack()
authorMichael Ellerman <michael@ellerman.id.au>
Tue, 9 Oct 2012 04:20:36 +0000 (04:20 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Thu, 15 Nov 2012 01:59:59 +0000 (12:59 +1100)
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: Michael Ellerman <michael@ellerman.id.au>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/xmon/xmon.c

index d940234b09ec9dcacac0ce029c33b85eb568355b..1f8d2f10a432442c2419228d1e7cc4cb120020ef 100644 (file)
@@ -1281,21 +1281,19 @@ static void get_function_bounds(unsigned long pc, unsigned long *startp,
        catch_memory_errors = 0;
 }
 
-static int xmon_depth_to_print = 64;
-
 #define LRSAVE_OFFSET          (STACK_FRAME_LR_SAVE * sizeof(unsigned long))
 #define MARKER_OFFSET          (STACK_FRAME_MARKER * sizeof(unsigned long))
 
 static void xmon_show_stack(unsigned long sp, unsigned long lr,
                            unsigned long pc)
 {
+       int max_to_print = 64;
        unsigned long ip;
        unsigned long newsp;
        unsigned long marker;
-       int count = 0;
        struct pt_regs regs;
 
-       do {
+       while (max_to_print--) {
                if (sp < PAGE_OFFSET) {
                        if (sp != 0)
                                printf("SP (%lx) is in userspace\n", sp);
@@ -1366,7 +1364,7 @@ static void xmon_show_stack(unsigned long sp, unsigned long lr,
                        break;
 
                sp = newsp;
-       } while (count++ < xmon_depth_to_print);
+       }
 }
 
 static void backtrace(struct pt_regs *excp)