+
+ now = get_timestamp(this_cpu);
+
+ /*
+ * Wake up the high-prio watchdog task twice per
+ * threshold timespan.
+ */
+ if (time_after(now - softlockup_thresh/2, touch_ts))
+ wake_up_process(per_cpu(softlockup_watchdog, this_cpu));
+
+ /* Warn about unreasonable delays: */
+ if (time_before_eq(now - softlockup_thresh, touch_ts))
+ return;
+
+ per_cpu(softlockup_print_ts, this_cpu) = touch_ts;
+
+ spin_lock(&print_lock);
+ printk(KERN_ERR "BUG: soft lockup - CPU#%d stuck for %lus! [%s:%d]\n",
+ this_cpu, now - touch_ts,
+ current->comm, task_pid_nr(current));
+ print_modules();
+ print_irqtrace_events(current);
+ if (regs)
+ show_regs(regs);
+ else
+ dump_stack();
+ spin_unlock(&print_lock);
+
+ if (softlockup_panic)
+ panic("softlockup: hung tasks");