Skip to content

Commit

Permalink
[PATCH] x86_64: Reduce screen space needed by stack trace
Browse files Browse the repository at this point in the history
Especially under Xen, where the console cannot be adjusted to more than 25
lines, it is fairly important that the information displayed during a panic
is as compact as possible. Below adjustments work towards that.

Signed-Off-By: Jan Beulich <jbeulich@novell.com>

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Jan Beulich authored and Linus Torvalds committed Jan 12, 2006
1 parent 5329e13 commit 1b2f630
Showing 1 changed file with 12 additions and 13 deletions.
25 changes: 12 additions & 13 deletions arch/x86_64/kernel/traps.c
Original file line number Diff line number Diff line change
Expand Up @@ -183,7 +183,6 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack,

void show_trace(unsigned long *stack)
{
unsigned long addr;
const unsigned cpu = safe_smp_processor_id();
unsigned long *irqstack_end = (unsigned long *)cpu_pda(cpu)->irqstackptr;
int i;
Expand All @@ -193,8 +192,14 @@ void show_trace(unsigned long *stack)

#define HANDLE_STACK(cond) \
do while (cond) { \
addr = *stack++; \
unsigned long addr = *stack++; \
if (kernel_text_address(addr)) { \
if (i > 50) { \
printk("\n "); \
i = 0; \
} \
else \
i += printk(" "); \
/* \
* If the address is either in the text segment of the \
* kernel, or in the region which contains vmalloc'ed \
Expand All @@ -204,25 +209,19 @@ void show_trace(unsigned long *stack)
* out the call path that was taken. \
*/ \
i += printk_address(addr); \
if (i > 50) { \
printk("\n "); \
i = 0; \
} \
else \
i += printk(" "); \
} \
} while (0)

for(i = 0; ; ) {
for(i = 11; ; ) {
const char *id;
unsigned long *estack_end;
estack_end = in_exception_stack(cpu, (unsigned long)stack,
&used, &id);

if (estack_end) {
i += printk(" <%s> ", id);
i += printk(" <%s>", id);
HANDLE_STACK (stack < estack_end);
i += printk(" <EOE> ");
i += printk(" <EOE>");
stack = (unsigned long *) estack_end[-2];
continue;
}
Expand All @@ -232,11 +231,11 @@ void show_trace(unsigned long *stack)
(IRQSTACKSIZE - 64) / sizeof(*irqstack);

if (stack >= irqstack && stack < irqstack_end) {
i += printk(" <IRQ> ");
i += printk(" <IRQ>");
HANDLE_STACK (stack < irqstack_end);
stack = (unsigned long *) (irqstack_end[-1]);
irqstack_end = NULL;
i += printk(" <EOI> ");
i += printk(" <EOI>");
continue;
}
}
Expand Down

0 comments on commit 1b2f630

Please sign in to comment.