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.
Unified · Split
| @@ -1395,11 +1395,15 @@ void hrtimer_peek_ahead_timers(void) · 1394 unmodified lines | |||
| 1395 | unsigned long flags; | 1395 | unsigned long flags; |
| 1396 | struct tick_device *td; | 1396 | struct tick_device *td; |
| 1397 | struct clock_event_device *dev; | 1397 | struct clock_event_device *dev; |
| 1398 | 1398 | struct hrtimer_cpu_base *cpu_base; | |
| 1399 | if (hrtimer_hres_active()) | 1399 | if (hrtimer_hres_active()) |
| 1400 | return; | 1400 | return; |
| 1401 | 1401 | ||
| 1402 | local_irq_save(flags); | 1402 | local_irq_save(flags); |
| 1403 | cpu_base = &__get_cpu_var(hrtimer_bases); | ||
| 1404 | if (!cpu_base->hres_active) | ||
| 1405 | goto out; | ||
| 1406 | |||
| 1403 | td = &__get_cpu_var(tick_cpu_device); | 1407 | td = &__get_cpu_var(tick_cpu_device); |
| 1404 | if (!td) | 1408 | if (!td) |
| 1405 | goto out; | 1409 | goto out; |