* [PATCH 0/5] hrtimer: cleanups and fixes
@ 2009-01-05 10:28 Peter Zijlstra
2009-01-05 10:28 ` [PATCH 1/5] hrtimer: splitout peek ahead functionality Peter Zijlstra
` (5 more replies)
0 siblings, 6 replies; 8+ messages in thread
From: Peter Zijlstra @ 2009-01-05 10:28 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Ingo Molnar, LKML, Vaidyanathan Srinivasan, Peter Zijlstra
Please consider for .29.
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 1/5] hrtimer: splitout peek ahead functionality
2009-01-05 10:28 [PATCH 0/5] hrtimer: cleanups and fixes Peter Zijlstra
@ 2009-01-05 10:28 ` Peter Zijlstra
2009-01-05 10:28 ` [PATCH 2/5] hrtimer: fix HOTPLUG_CPU=n compile warning Peter Zijlstra
` (4 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Peter Zijlstra @ 2009-01-05 10:28 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Ingo Molnar, LKML, Vaidyanathan Srinivasan, Peter Zijlstra
[-- Attachment #1: hrtimers-splitout-peek-ahead-functionality.patch --]
[-- Type: text/plain, Size: 1385 bytes --]
From: Thomas Gleixner <tglx@linutronix.de>
Provide a peek ahead function that assumes irqs disabled, allows for micro
optimizations.
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
kernel/hrtimer.c | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
Index: linux-2.6-tip/kernel/hrtimer.c
===================================================================
--- linux-2.6-tip.orig/kernel/hrtimer.c
+++ linux-2.6-tip/kernel/hrtimer.c
@@ -1244,6 +1244,22 @@ void hrtimer_interrupt(struct clock_even
}
}
+/*
+ * local version of hrtimer_peek_ahead_timers() called with interrupts
+ * disabled.
+ */
+static void __hrtimer_peek_ahead_timers(void)
+{
+ struct tick_device *td;
+
+ if (!hrtimer_hres_active())
+ return;
+
+ td = &__get_cpu_var(tick_cpu_device);
+ if (td && td->evtdev)
+ hrtimer_interrupt(td->evtdev);
+}
+
/**
* hrtimer_peek_ahead_timers -- run soft-expired timers now
*
@@ -1255,16 +1271,10 @@ void hrtimer_interrupt(struct clock_even
*/
void hrtimer_peek_ahead_timers(void)
{
- struct tick_device *td;
unsigned long flags;
- if (!hrtimer_hres_active())
- return;
-
local_irq_save(flags);
- td = &__get_cpu_var(tick_cpu_device);
- if (td && td->evtdev)
- hrtimer_interrupt(td->evtdev);
+ __hrtimer_peek_ahead_timers();
local_irq_restore(flags);
}
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 2/5] hrtimer: fix HOTPLUG_CPU=n compile warning
2009-01-05 10:28 [PATCH 0/5] hrtimer: cleanups and fixes Peter Zijlstra
2009-01-05 10:28 ` [PATCH 1/5] hrtimer: splitout peek ahead functionality Peter Zijlstra
@ 2009-01-05 10:28 ` Peter Zijlstra
2009-01-05 10:28 ` [PATCH 3/5] hrtimer: simplify hotplug migration Peter Zijlstra
` (3 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Peter Zijlstra @ 2009-01-05 10:28 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Ingo Molnar, LKML, Vaidyanathan Srinivasan, Peter Zijlstra
[-- Attachment #1: hrtimers-fix-hotplug-cpu-n-compile.patch --]
[-- Type: text/plain, Size: 1921 bytes --]
From: Thomas Gleixner <tglx@linutronix.de>
kernel/hrtimer.c: In function 'hrtimer_cpu_notify':
kernel/hrtimer.c:1574: warning: unused variable 'dcpu'
Introduced by commit 37810659ea7d9572c5ac284ade272f806ef8f788
("hrtimer: removing all ur callback modes, fix hotplug") from the
timers. dcpu is only used if CONFIG_HOTPLUG_CPU is set.
Pointed-out-by: Stephen Rothwell <sfr@canb.auug.org.au>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
kernel/hrtimer.c | 19 ++++++++-----------
1 file changed, 8 insertions(+), 11 deletions(-)
Index: linux-2.6/kernel/hrtimer.c
===================================================================
--- linux-2.6.orig/kernel/hrtimer.c
+++ linux-2.6/kernel/hrtimer.c
@@ -1532,6 +1532,11 @@ static void __cpuinit init_hrtimers_cpu(
#ifdef CONFIG_HOTPLUG_CPU
+static void tickle_timers(void *arg)
+{
+ hrtimer_peek_ahead_timers();
+}
+
static void migrate_hrtimer_list(struct hrtimer_clock_base *old_base,
struct hrtimer_clock_base *new_base)
{
@@ -1567,7 +1572,7 @@ static void migrate_hrtimer_list(struct
}
}
-static int migrate_hrtimers(int scpu)
+static void migrate_hrtimers(int scpu)
{
struct hrtimer_cpu_base *old_base, *new_base;
int dcpu, i;
@@ -1595,12 +1600,7 @@ static int migrate_hrtimers(int scpu)
spin_unlock_irq(&new_base->lock);
put_cpu_var(hrtimer_bases);
- return dcpu;
-}
-
-static void tickle_timers(void *arg)
-{
- hrtimer_peek_ahead_timers();
+ smp_call_function_single(dcpu, tickle_timers, NULL, 0);
}
#endif /* CONFIG_HOTPLUG_CPU */
@@ -1625,11 +1625,8 @@ static int __cpuinit hrtimer_cpu_notify(
case CPU_DEAD:
case CPU_DEAD_FROZEN:
{
- int dcpu;
-
clockevents_notify(CLOCK_EVT_NOTIFY_CPU_DEAD, &scpu);
- dcpu = migrate_hrtimers(scpu);
- smp_call_function_single(dcpu, tickle_timers, NULL, 0);
+ migrate_hrtimers(scpu);
break;
}
#endif
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 3/5] hrtimer: simplify hotplug migration
2009-01-05 10:28 [PATCH 0/5] hrtimer: cleanups and fixes Peter Zijlstra
2009-01-05 10:28 ` [PATCH 1/5] hrtimer: splitout peek ahead functionality Peter Zijlstra
2009-01-05 10:28 ` [PATCH 2/5] hrtimer: fix HOTPLUG_CPU=n compile warning Peter Zijlstra
@ 2009-01-05 10:28 ` Peter Zijlstra
2009-01-05 10:28 ` [PATCH 4/5] hrtimer: fix recursion deadlock by re-introducing the softirq Peter Zijlstra
` (2 subsequent siblings)
5 siblings, 0 replies; 8+ messages in thread
From: Peter Zijlstra @ 2009-01-05 10:28 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Ingo Molnar, LKML, Vaidyanathan Srinivasan, Peter Zijlstra
[-- Attachment #1: hrtimers-simplify-migration.patch --]
[-- Type: text/plain, Size: 2072 bytes --]
From: Thomas Gleixner <tglx@linutronix.de>
No need for a smp function call, which is likely to run on the same
CPU anyway. We can just call hrtimers_peek_ahead() in the interrupts
disabled section of migrate_hrtimers().
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Acked-by: Peter Zijlstra <peterz@infradead.org>
---
kernel/hrtimer.c | 25 ++++++++++---------------
1 file changed, 10 insertions(+), 15 deletions(-)
Index: linux-2.6-tip/kernel/hrtimer.c
===================================================================
--- linux-2.6-tip.orig/kernel/hrtimer.c
+++ linux-2.6-tip/kernel/hrtimer.c
@@ -1505,11 +1505,6 @@ static void __cpuinit init_hrtimers_cpu(
#ifdef CONFIG_HOTPLUG_CPU
-static void tickle_timers(void *arg)
-{
- hrtimer_peek_ahead_timers();
-}
-
static void migrate_hrtimer_list(struct hrtimer_clock_base *old_base,
struct hrtimer_clock_base *new_base)
{
@@ -1548,20 +1543,19 @@ static void migrate_hrtimer_list(struct
static void migrate_hrtimers(int scpu)
{
struct hrtimer_cpu_base *old_base, *new_base;
- int dcpu, i;
+ int i;
BUG_ON(cpu_online(scpu));
- old_base = &per_cpu(hrtimer_bases, scpu);
- new_base = &get_cpu_var(hrtimer_bases);
-
- dcpu = smp_processor_id();
-
tick_cancel_sched_timer(scpu);
+
+ local_irq_disable();
+ old_base = &per_cpu(hrtimer_bases, scpu);
+ new_base = &__get_cpu_var(hrtimer_bases);
/*
* The caller is globally serialized and nobody else
* takes two locks at once, deadlock is not possible.
*/
- spin_lock_irq(&new_base->lock);
+ spin_lock(&new_base->lock);
spin_lock_nested(&old_base->lock, SINGLE_DEPTH_NESTING);
for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) {
@@ -1570,10 +1564,11 @@ static void migrate_hrtimers(int scpu)
}
spin_unlock(&old_base->lock);
- spin_unlock_irq(&new_base->lock);
- put_cpu_var(hrtimer_bases);
+ spin_unlock(&new_base->lock);
- smp_call_function_single(dcpu, tickle_timers, NULL, 0);
+ /* Check, if we got expired work to do */
+ __hrtimer_peek_ahead_timers();
+ local_irq_enable();
}
#endif /* CONFIG_HOTPLUG_CPU */
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 4/5] hrtimer: fix recursion deadlock by re-introducing the softirq
2009-01-05 10:28 [PATCH 0/5] hrtimer: cleanups and fixes Peter Zijlstra
` (2 preceding siblings ...)
2009-01-05 10:28 ` [PATCH 3/5] hrtimer: simplify hotplug migration Peter Zijlstra
@ 2009-01-05 10:28 ` Peter Zijlstra
2009-01-05 10:28 ` [PATCH 5/5] hrtimer: fixup comments Peter Zijlstra
2009-01-05 12:15 ` [PATCH 0/5] hrtimer: cleanups and fixes Ingo Molnar
5 siblings, 0 replies; 8+ messages in thread
From: Peter Zijlstra @ 2009-01-05 10:28 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Ingo Molnar, LKML, Vaidyanathan Srinivasan, Peter Zijlstra
[-- Attachment #1: hrtimer-reintroduce-softirq.patch --]
[-- Type: text/plain, Size: 5548 bytes --]
There are a few sites that do:
spin_lock_irq(&foo)
hrtimer_start(&bar)
__run_hrtimer(&bar)
func()
spin_lock(&foo)
which obviously deadlocks. In order to avoid this, never call __run_hrtimer()
from hrtimer_start*() context, but instead defer this to softirq context.
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
include/linux/interrupt.h | 3 ++
kernel/hrtimer.c | 60 ++++++++++++++++++++--------------------------
2 files changed, 30 insertions(+), 33 deletions(-)
Index: linux-2.6/include/linux/interrupt.h
===================================================================
--- linux-2.6.orig/include/linux/interrupt.h
+++ linux-2.6/include/linux/interrupt.h
@@ -253,6 +253,9 @@ enum
BLOCK_SOFTIRQ,
TASKLET_SOFTIRQ,
SCHED_SOFTIRQ,
+#ifdef CONFIG_HIGH_RES_TIMERS
+ HRTIMER_SOFTIRQ,
+#endif
RCU_SOFTIRQ, /* Preferable RCU should always be the last softirq */
NR_SOFTIRQS
Index: linux-2.6/kernel/hrtimer.c
===================================================================
--- linux-2.6.orig/kernel/hrtimer.c
+++ linux-2.6/kernel/hrtimer.c
@@ -634,7 +634,6 @@ static inline void hrtimer_init_timer_hr
{
}
-static void __run_hrtimer(struct hrtimer *timer);
/*
* When High resolution timers are active, try to reprogram. Note, that in case
@@ -646,13 +645,9 @@ static inline int hrtimer_enqueue_reprog
struct hrtimer_clock_base *base)
{
if (base->cpu_base->hres_active && hrtimer_reprogram(timer, base)) {
- /*
- * XXX: recursion check?
- * hrtimer_forward() should round up with timer granularity
- * so that we never get into inf recursion here,
- * it doesn't do that though
- */
- __run_hrtimer(timer);
+ spin_unlock(&base->cpu_base->lock);
+ raise_softirq_irqoff(HRTIMER_SOFTIRQ);
+ spin_lock(&base->cpu_base->lock);
return 1;
}
return 0;
@@ -705,11 +698,6 @@ static inline int hrtimer_enqueue_reprog
}
static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base) { }
static inline void hrtimer_init_timer_hres(struct hrtimer *timer) { }
-static inline int hrtimer_reprogram(struct hrtimer *timer,
- struct hrtimer_clock_base *base)
-{
- return 0;
-}
#endif /* CONFIG_HIGH_RES_TIMERS */
@@ -780,9 +768,11 @@ EXPORT_SYMBOL_GPL(hrtimer_forward);
*
* The timer is inserted in expiry order. Insertion into the
* red black tree is O(log(n)). Must hold the base lock.
+ *
+ * Returns 1 when the new timer is the leftmost timer in the tree.
*/
-static void enqueue_hrtimer(struct hrtimer *timer,
- struct hrtimer_clock_base *base, int reprogram)
+static int enqueue_hrtimer(struct hrtimer *timer,
+ struct hrtimer_clock_base *base)
{
struct rb_node **link = &base->active.rb_node;
struct rb_node *parent = NULL;
@@ -814,20 +804,8 @@ static void enqueue_hrtimer(struct hrtim
* Insert the timer to the rbtree and check whether it
* replaces the first pending timer
*/
- if (leftmost) {
- /*
- * Reprogram the clock event device. When the timer is already
- * expired hrtimer_enqueue_reprogram has either called the
- * callback or added it to the pending list and raised the
- * softirq.
- *
- * This is a NOP for !HIGHRES
- */
- if (reprogram && hrtimer_enqueue_reprogram(timer, base))
- return;
-
+ if (leftmost)
base->first = &timer->node;
- }
rb_link_node(&timer->node, parent, link);
rb_insert_color(&timer->node, &base->active);
@@ -836,6 +814,8 @@ static void enqueue_hrtimer(struct hrtim
* state of a possibly running callback.
*/
timer->state |= HRTIMER_STATE_ENQUEUED;
+
+ return leftmost;
}
/*
@@ -912,7 +892,7 @@ hrtimer_start_range_ns(struct hrtimer *t
{
struct hrtimer_clock_base *base, *new_base;
unsigned long flags;
- int ret;
+ int ret, leftmost;
base = lock_hrtimer_base(timer, &flags);
@@ -940,12 +920,16 @@ hrtimer_start_range_ns(struct hrtimer *t
timer_stats_hrtimer_set_start_info(timer);
+ leftmost = enqueue_hrtimer(timer, new_base);
+
/*
* Only allow reprogramming if the new base is on this CPU.
* (it might still be on another CPU if the timer was pending)
+ *
+ * XXX send_remote_softirq() ?
*/
- enqueue_hrtimer(timer, new_base,
- new_base->cpu_base == &__get_cpu_var(hrtimer_bases));
+ if (leftmost && new_base->cpu_base == &__get_cpu_var(hrtimer_bases))
+ hrtimer_enqueue_reprogram(timer, new_base);
unlock_hrtimer_base(timer, &flags);
@@ -1163,7 +1147,7 @@ static void __run_hrtimer(struct hrtimer
*/
if (restart != HRTIMER_NORESTART) {
BUG_ON(timer->state != HRTIMER_STATE_CALLBACK);
- enqueue_hrtimer(timer, base, 0);
+ enqueue_hrtimer(timer, base);
}
timer->state &= ~HRTIMER_STATE_CALLBACK;
}
@@ -1305,6 +1289,11 @@ void hrtimer_peek_ahead_timers(void)
local_irq_restore(flags);
}
+static void run_hrtimer_softirq(struct softirq_action *h)
+{
+ hrtimer_peek_ahead_timers();
+}
+
#endif /* CONFIG_HIGH_RES_TIMERS */
/*
@@ -1560,7 +1549,7 @@ static void migrate_hrtimer_list(struct
* is done, which will run all expired timers and re-programm
* the timer device.
*/
- enqueue_hrtimer(timer, new_base, 0);
+ enqueue_hrtimer(timer, new_base);
/* Clear the migration state bit */
timer->state &= ~HRTIMER_STATE_MIGRATE;
@@ -1642,6 +1631,9 @@ void __init hrtimers_init(void)
hrtimer_cpu_notify(&hrtimers_nb, (unsigned long)CPU_UP_PREPARE,
(void *)(long)smp_processor_id());
register_cpu_notifier(&hrtimers_nb);
+#ifdef CONFIG_HIGH_RES_TIMERS
+ open_softirq(HRTIMER_SOFTIRQ, run_hrtimer_softirq);
+#endif
}
/**
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH 5/5] hrtimer: fixup comments
2009-01-05 10:28 [PATCH 0/5] hrtimer: cleanups and fixes Peter Zijlstra
` (3 preceding siblings ...)
2009-01-05 10:28 ` [PATCH 4/5] hrtimer: fix recursion deadlock by re-introducing the softirq Peter Zijlstra
@ 2009-01-05 10:28 ` Peter Zijlstra
2009-01-05 12:15 ` [PATCH 0/5] hrtimer: cleanups and fixes Ingo Molnar
5 siblings, 0 replies; 8+ messages in thread
From: Peter Zijlstra @ 2009-01-05 10:28 UTC (permalink / raw)
To: Thomas Gleixner
Cc: Ingo Molnar, LKML, Vaidyanathan Srinivasan, Peter Zijlstra
[-- Attachment #1: hrtimers-comments.patch --]
[-- Type: text/plain, Size: 1876 bytes --]
From: Thomas Gleixner <tglx@linutronix.de>
Clean up the comments
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
---
kernel/hrtimer.c | 20 +++++++++-----------
1 file changed, 9 insertions(+), 11 deletions(-)
Index: linux-2.6/kernel/hrtimer.c
===================================================================
--- linux-2.6.orig/kernel/hrtimer.c
+++ linux-2.6/kernel/hrtimer.c
@@ -1141,9 +1141,9 @@ static void __run_hrtimer(struct hrtimer
spin_lock(&cpu_base->lock);
/*
- * Note: We clear the CALLBACK bit after enqueue_hrtimer to avoid
- * reprogramming of the event hardware. This happens at the end of this
- * function anyway.
+ * Note: We clear the CALLBACK bit after enqueue_hrtimer and
+ * we do not reprogramm the event hardware. Happens either in
+ * hrtimer_start_range_ns() or in hrtimer_interrupt()
*/
if (restart != HRTIMER_NORESTART) {
BUG_ON(timer->state != HRTIMER_STATE_CALLBACK);
@@ -1540,14 +1540,12 @@ static void migrate_hrtimer_list(struct
__remove_hrtimer(timer, old_base, HRTIMER_STATE_MIGRATE, 0);
timer->base = new_base;
/*
- * Enqueue the timers on the new cpu, but do not reprogram
- * the timer as that would enable a deadlock between
- * hrtimer_enqueue_reprogramm() running the timer and us still
- * holding a nested base lock.
- *
- * Instead we tickle the hrtimer interrupt after the migration
- * is done, which will run all expired timers and re-programm
- * the timer device.
+ * Enqueue the timers on the new cpu. This does not
+ * reprogram the event device in case the timer
+ * expires before the earliest on this CPU, but we run
+ * hrtimer_interrupt after we migrated everything to
+ * sort out already expired timers and reprogram the
+ * event device.
*/
enqueue_hrtimer(timer, new_base);
--
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH 0/5] hrtimer: cleanups and fixes
2009-01-05 10:28 [PATCH 0/5] hrtimer: cleanups and fixes Peter Zijlstra
` (4 preceding siblings ...)
2009-01-05 10:28 ` [PATCH 5/5] hrtimer: fixup comments Peter Zijlstra
@ 2009-01-05 12:15 ` Ingo Molnar
2009-01-05 13:13 ` [PATCH] hrtimer: splitout peek ahead functionality, fix Ingo Molnar
5 siblings, 1 reply; 8+ messages in thread
From: Ingo Molnar @ 2009-01-05 12:15 UTC (permalink / raw)
To: Peter Zijlstra; +Cc: Thomas Gleixner, LKML, Vaidyanathan Srinivasan
* Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
> Please consider for .29.
picked them up into tip/timers/urgent:
e3f1d88: hrtimer: fixup comments
a6037b6: hrtimer: fix recursion deadlock by re-introducing the softirq
731a55b: hrtimer: simplify hotplug migration
d5fd43c: hrtimer: fix HOTPLUG_CPU=n compile warning
8bdec95: hrtimer: splitout peek ahead functionality
thanks Peter!
Ingo
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH] hrtimer: splitout peek ahead functionality, fix
2009-01-05 12:15 ` [PATCH 0/5] hrtimer: cleanups and fixes Ingo Molnar
@ 2009-01-05 13:13 ` Ingo Molnar
0 siblings, 0 replies; 8+ messages in thread
From: Ingo Molnar @ 2009-01-05 13:13 UTC (permalink / raw)
To: Peter Zijlstra; +Cc: Thomas Gleixner, LKML, Vaidyanathan Srinivasan
* Ingo Molnar <mingo@elte.hu> wrote:
>
> * Peter Zijlstra <a.p.zijlstra@chello.nl> wrote:
>
> > Please consider for .29.
>
> picked them up into tip/timers/urgent:
>
> e3f1d88: hrtimer: fixup comments
> a6037b6: hrtimer: fix recursion deadlock by re-introducing the softirq
> 731a55b: hrtimer: simplify hotplug migration
> d5fd43c: hrtimer: fix HOTPLUG_CPU=n compile warning
> 8bdec95: hrtimer: splitout peek ahead functionality
i needed the small fixlet below, for !HIGH_RES_TIMERS.
Ingo
-------------->
>From 82c5b7b527ccc4b5d3cf832437e842f9d2920a79 Mon Sep 17 00:00:00 2001
From: Ingo Molnar <mingo@elte.hu>
Date: Mon, 5 Jan 2009 14:11:10 +0100
Subject: [PATCH] hrtimer: splitout peek ahead functionality, fix
Impact: build fix on !CONFIG_HIGH_RES_TIMERS
Fix:
kernel/hrtimer.c:1586: error: implicit declaration of function '__hrtimer_peek_ahead_timers'
Signen-off-by: Ingo Molnar <mingo@elte.hu>
---
kernel/hrtimer.c | 6 +++++-
1 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
index aa024f2..1455b76 100644
--- a/kernel/hrtimer.c
+++ b/kernel/hrtimer.c
@@ -1268,7 +1268,11 @@ static void run_hrtimer_softirq(struct softirq_action *h)
hrtimer_peek_ahead_timers();
}
-#endif /* CONFIG_HIGH_RES_TIMERS */
+#else /* CONFIG_HIGH_RES_TIMERS */
+
+static inline void __hrtimer_peek_ahead_timers(void) { }
+
+#endif /* !CONFIG_HIGH_RES_TIMERS */
/*
* Called from timer softirq every jiffy, expire hrtimers:
^ permalink raw reply related [flat|nested] 8+ messages in thread
end of thread, other threads:[~2009-01-05 13:14 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-01-05 10:28 [PATCH 0/5] hrtimer: cleanups and fixes Peter Zijlstra
2009-01-05 10:28 ` [PATCH 1/5] hrtimer: splitout peek ahead functionality Peter Zijlstra
2009-01-05 10:28 ` [PATCH 2/5] hrtimer: fix HOTPLUG_CPU=n compile warning Peter Zijlstra
2009-01-05 10:28 ` [PATCH 3/5] hrtimer: simplify hotplug migration Peter Zijlstra
2009-01-05 10:28 ` [PATCH 4/5] hrtimer: fix recursion deadlock by re-introducing the softirq Peter Zijlstra
2009-01-05 10:28 ` [PATCH 5/5] hrtimer: fixup comments Peter Zijlstra
2009-01-05 12:15 ` [PATCH 0/5] hrtimer: cleanups and fixes Ingo Molnar
2009-01-05 13:13 ` [PATCH] hrtimer: splitout peek ahead functionality, fix Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox