--- y/kernel/time/hrtimer.c +++ h/kernel/time/hrtimer.c @@ -1647,6 +1647,7 @@ static void __run_hrtimer(struct hrtimer enum hrtimer_restart (*fn)(struct hrtimer *); bool expires_in_hardirq; int restart; + unsigned long ts; lockdep_assert_held(&cpu_base->lock); @@ -1682,8 +1683,12 @@ static void __run_hrtimer(struct hrtimer trace_hrtimer_expire_entry(timer, now); expires_in_hardirq = lockdep_hrtimer_enter(timer); + ts = jiffies + 4; + restart = fn(timer); + WARN_ONCE(time_after(jiffies, ts), "hrtimer hog %ps ran longer than 4 ticks\n", fn); + lockdep_hrtimer_exit(expires_in_hardirq); trace_hrtimer_expire_exit(timer); raw_spin_lock_irq(&cpu_base->lock);