diff options
| -rw-r--r-- | arch/x86_64/kernel/traps.c | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/arch/x86_64/kernel/traps.c b/arch/x86_64/kernel/traps.c index fcee07db3b68..d345c712c6ca 100644 --- a/arch/x86_64/kernel/traps.c +++ b/arch/x86_64/kernel/traps.c | |||
| @@ -183,7 +183,6 @@ static unsigned long *in_exception_stack(unsigned cpu, unsigned long stack, | |||
| 183 | 183 | ||
| 184 | void show_trace(unsigned long *stack) | 184 | void show_trace(unsigned long *stack) |
| 185 | { | 185 | { |
| 186 | unsigned long addr; | ||
| 187 | const unsigned cpu = safe_smp_processor_id(); | 186 | const unsigned cpu = safe_smp_processor_id(); |
| 188 | unsigned long *irqstack_end = (unsigned long *)cpu_pda(cpu)->irqstackptr; | 187 | unsigned long *irqstack_end = (unsigned long *)cpu_pda(cpu)->irqstackptr; |
| 189 | int i; | 188 | int i; |
| @@ -193,8 +192,14 @@ void show_trace(unsigned long *stack) | |||
| 193 | 192 | ||
| 194 | #define HANDLE_STACK(cond) \ | 193 | #define HANDLE_STACK(cond) \ |
| 195 | do while (cond) { \ | 194 | do while (cond) { \ |
| 196 | addr = *stack++; \ | 195 | unsigned long addr = *stack++; \ |
| 197 | if (kernel_text_address(addr)) { \ | 196 | if (kernel_text_address(addr)) { \ |
| 197 | if (i > 50) { \ | ||
| 198 | printk("\n "); \ | ||
| 199 | i = 0; \ | ||
| 200 | } \ | ||
| 201 | else \ | ||
| 202 | i += printk(" "); \ | ||
| 198 | /* \ | 203 | /* \ |
| 199 | * If the address is either in the text segment of the \ | 204 | * If the address is either in the text segment of the \ |
| 200 | * kernel, or in the region which contains vmalloc'ed \ | 205 | * kernel, or in the region which contains vmalloc'ed \ |
| @@ -204,25 +209,19 @@ void show_trace(unsigned long *stack) | |||
| 204 | * out the call path that was taken. \ | 209 | * out the call path that was taken. \ |
| 205 | */ \ | 210 | */ \ |
| 206 | i += printk_address(addr); \ | 211 | i += printk_address(addr); \ |
| 207 | if (i > 50) { \ | ||
| 208 | printk("\n "); \ | ||
| 209 | i = 0; \ | ||
| 210 | } \ | ||
| 211 | else \ | ||
| 212 | i += printk(" "); \ | ||
| 213 | } \ | 212 | } \ |
| 214 | } while (0) | 213 | } while (0) |
| 215 | 214 | ||
| 216 | for(i = 0; ; ) { | 215 | for(i = 11; ; ) { |
| 217 | const char *id; | 216 | const char *id; |
| 218 | unsigned long *estack_end; | 217 | unsigned long *estack_end; |
| 219 | estack_end = in_exception_stack(cpu, (unsigned long)stack, | 218 | estack_end = in_exception_stack(cpu, (unsigned long)stack, |
| 220 | &used, &id); | 219 | &used, &id); |
| 221 | 220 | ||
| 222 | if (estack_end) { | 221 | if (estack_end) { |
| 223 | i += printk(" <%s> ", id); | 222 | i += printk(" <%s>", id); |
| 224 | HANDLE_STACK (stack < estack_end); | 223 | HANDLE_STACK (stack < estack_end); |
| 225 | i += printk(" <EOE> "); | 224 | i += printk(" <EOE>"); |
| 226 | stack = (unsigned long *) estack_end[-2]; | 225 | stack = (unsigned long *) estack_end[-2]; |
| 227 | continue; | 226 | continue; |
| 228 | } | 227 | } |
| @@ -232,11 +231,11 @@ void show_trace(unsigned long *stack) | |||
| 232 | (IRQSTACKSIZE - 64) / sizeof(*irqstack); | 231 | (IRQSTACKSIZE - 64) / sizeof(*irqstack); |
| 233 | 232 | ||
| 234 | if (stack >= irqstack && stack < irqstack_end) { | 233 | if (stack >= irqstack && stack < irqstack_end) { |
| 235 | i += printk(" <IRQ> "); | 234 | i += printk(" <IRQ>"); |
| 236 | HANDLE_STACK (stack < irqstack_end); | 235 | HANDLE_STACK (stack < irqstack_end); |
| 237 | stack = (unsigned long *) (irqstack_end[-1]); | 236 | stack = (unsigned long *) (irqstack_end[-1]); |
| 238 | irqstack_end = NULL; | 237 | irqstack_end = NULL; |
| 239 | i += printk(" <EOI> "); | 238 | i += printk(" <EOI>"); |
| 240 | continue; | 239 | continue; |
| 241 | } | 240 | } |
| 242 | } | 241 | } |
