+ unsigned long touch_ts = per_cpu(softlockup_touch_ts, this_cpu);
+ unsigned long print_ts;
+ struct pt_regs *regs = get_irq_regs();
+ unsigned long now;
+
+ /* Is detection switched off? */
+ if (!per_cpu(softlockup_watchdog, this_cpu) || softlockup_thresh <= 0) {
+ /* Be sure we don't false trigger if switched back on */
+ if (touch_ts)
+ per_cpu(softlockup_touch_ts, this_cpu) = 0;
+ return;
+ }
+
+ if (touch_ts == 0) {
+ if (unlikely(per_cpu(softlock_touch_sync, this_cpu))) {
+ /*
+ * If the time stamp was touched atomically
+ * make sure the scheduler tick is up to date.
+ */
+ per_cpu(softlock_touch_sync, this_cpu) = false;
+ sched_clock_tick();
+ }
+ __touch_softlockup_watchdog();
+ return;
+ }
+
+ print_ts = per_cpu(softlockup_print_ts, this_cpu);