There's a small race/chance that, while hrtimers are enabled globally, they're later not enabled when we're calling the hrtimer_interrupt() function, which then BUG_ON()'s for that. This patch closes that race/gap.
Showing the changes to kernel/hrtimer.c (1 of 1 file). Show all
Unified · Split
| @@ -1395,11 +1395,15 @@ void hrtimer_peek_ahead_timers(void) · 1394 unmodified lines | ||
| 1395 | 1395 | unsigned long flags; |
| 1396 | 1396 | struct tick_device *td; |
| 1397 | 1397 | struct clock_event_device *dev; |
| 1398 | − | |
| 1398 | + struct hrtimer_cpu_base *cpu_base; | |
| 1399 | 1399 | if (hrtimer_hres_active()) |
| 1400 | 1400 | return; |
| 1401 | 1401 | |
| 1402 | 1402 | local_irq_save(flags); |
| 1403 | + cpu_base = &__get_cpu_var(hrtimer_bases); | |
| 1404 | + if (!cpu_base->hres_active) | |
| 1405 | + goto out; | |
| 1406 | + | |
| 1403 | 1407 | td = &__get_cpu_var(tick_cpu_device); |
| 1404 | 1408 | if (!td) |
| 1405 | 1409 | goto out; |