diff options
Diffstat (limited to 'kernel/hrtimer.c')
-rw-r--r-- | kernel/hrtimer.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c index 9a4c90185566..eb2cf984959f 100644 --- a/kernel/hrtimer.c +++ b/kernel/hrtimer.c | |||
@@ -1381,6 +1381,36 @@ void hrtimer_interrupt(struct clock_event_device *dev) | |||
1381 | raise_softirq(HRTIMER_SOFTIRQ); | 1381 | raise_softirq(HRTIMER_SOFTIRQ); |
1382 | } | 1382 | } |
1383 | 1383 | ||
1384 | /** | ||
1385 | * hrtimer_peek_ahead_timers -- run soft-expired timers now | ||
1386 | * | ||
1387 | * hrtimer_peek_ahead_timers will peek at the timer queue of | ||
1388 | * the current cpu and check if there are any timers for which | ||
1389 | * the soft expires time has passed. If any such timers exist, | ||
1390 | * they are run immediately and then removed from the timer queue. | ||
1391 | * | ||
1392 | */ | ||
1393 | void hrtimer_peek_ahead_timers(void) | ||
1394 | { | ||
1395 | unsigned long flags; | ||
1396 | struct tick_device *td; | ||
1397 | struct clock_event_device *dev; | ||
1398 | |||
1399 | if (hrtimer_hres_active()) | ||
1400 | return; | ||
1401 | |||
1402 | local_irq_save(flags); | ||
1403 | td = &__get_cpu_var(tick_cpu_device); | ||
1404 | if (!td) | ||
1405 | goto out; | ||
1406 | dev = td->evtdev; | ||
1407 | if (!dev) | ||
1408 | goto out; | ||
1409 | hrtimer_interrupt(dev); | ||
1410 | out: | ||
1411 | local_irq_restore(flags); | ||
1412 | } | ||
1413 | |||
1384 | static void run_hrtimer_softirq(struct softirq_action *h) | 1414 | static void run_hrtimer_softirq(struct softirq_action *h) |
1385 | { | 1415 | { |
1386 | run_hrtimer_pending(&__get_cpu_var(hrtimer_bases)); | 1416 | run_hrtimer_pending(&__get_cpu_var(hrtimer_bases)); |