|
@@ -272,6 +272,8 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
|
|
|
|
|
stack = sp;
|
|
|
for (i = 0; i < kstack_depth_to_print; i++) {
|
|
|
+ unsigned long word;
|
|
|
+
|
|
|
if (stack >= irq_stack && stack <= irq_stack_end) {
|
|
|
if (stack == irq_stack_end) {
|
|
|
stack = (unsigned long *) (irq_stack_end[-1]);
|
|
@@ -281,12 +283,18 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
|
|
|
if (kstack_end(stack))
|
|
|
break;
|
|
|
}
|
|
|
+
|
|
|
+ if (probe_kernel_address(stack, word))
|
|
|
+ break;
|
|
|
+
|
|
|
if ((i % STACKSLOTS_PER_LINE) == 0) {
|
|
|
if (i != 0)
|
|
|
pr_cont("\n");
|
|
|
- printk("%s %016lx", log_lvl, *stack++);
|
|
|
+ printk("%s %016lx", log_lvl, word);
|
|
|
} else
|
|
|
- pr_cont(" %016lx", *stack++);
|
|
|
+ pr_cont(" %016lx", word);
|
|
|
+
|
|
|
+ stack++;
|
|
|
touch_nmi_watchdog();
|
|
|
}
|
|
|
preempt_enable();
|