]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - kernel/hrtimer.c
hrtimer: peek at the timer queue just before going idle
[linux-2.6-omap-h63xx.git] / kernel / hrtimer.c
index 9a4c901855668fd0daecdd398456a01f348d32ca..eb2cf984959fe154a8c3cdd07129227a95bc6e31 100644 (file)
@@ -1381,6 +1381,36 @@ void hrtimer_interrupt(struct clock_event_device *dev)
                raise_softirq(HRTIMER_SOFTIRQ);
 }
 
+/**
+ * hrtimer_peek_ahead_timers -- run soft-expired timers now
+ *
+ * hrtimer_peek_ahead_timers will peek at the timer queue of
+ * the current cpu and check if there are any timers for which
+ * the soft expires time has passed. If any such timers exist,
+ * they are run immediately and then removed from the timer queue.
+ *
+ */
+void hrtimer_peek_ahead_timers(void)
+{
+       unsigned long flags;
+       struct tick_device *td;
+       struct clock_event_device *dev;
+
+       if (hrtimer_hres_active())
+               return;
+
+       local_irq_save(flags);
+       td = &__get_cpu_var(tick_cpu_device);
+       if (!td)
+               goto out;
+       dev = td->evtdev;
+       if (!dev)
+               goto out;
+       hrtimer_interrupt(dev);
+out:
+       local_irq_restore(flags);
+}
+
 static void run_hrtimer_softirq(struct softirq_action *h)
 {
        run_hrtimer_pending(&__get_cpu_var(hrtimer_bases));