public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [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