Merge tag 'for-f2fs-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/jaegeuk...
[cascardo/linux.git] / arch / x86 / kernel / dumpstack_64.c
index d558a8a..6dede08 100644 (file)
@@ -264,7 +264,9 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs,
         * back trace for this cpu:
         */
        if (sp == NULL) {
-               if (task)
+               if (regs)
+                       sp = (unsigned long *)regs->sp;
+               else if (task)
                        sp = (unsigned long *)task->thread.sp;
                else
                        sp = (unsigned long *)&sp;
@@ -272,6 +274,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 +285,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();