Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=fd064b9b7770d5c7705bf9542950c7bd81c30f98
Commit:     fd064b9b7770d5c7705bf9542950c7bd81c30f98
Parent:     1cfd68496e53f7be09a3c1358d1d389004217541
Author:     Thomas Gleixner <[EMAIL PROTECTED]>
AuthorDate: Fri Feb 16 01:27:47 2007 -0800
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Fri Feb 16 08:13:58 2007 -0800

    [PATCH] Extend next_timer_interrupt() to use a reference jiffie
    
    For CONFIG_NO_HZ we need to calculate the next timer wheel event based on a
    given jiffie value.  Extend the existing code to allow the extra 'now'
    argument.  Provide a compability function for the existing implementations 
to
    call the function with now == jiffies.  (This also solves the racyness of 
the
    original code vs.  jiffies changing during the iteration.)
    
    No functional changes to existing users of this infrastructure.
    
    [ remove WARN_ON() that triggered on s390, by Carsten Otte <[EMAIL 
PROTECTED]> ]
    [ made new helper static, Adrian Bunk <[EMAIL PROTECTED]> ]
    Signed-off-by: Thomas Gleixner <[EMAIL PROTECTED]>
    Signed-off-by: Ingo Molnar <[EMAIL PROTECTED]>
    Cc: john stultz <[EMAIL PROTECTED]>
    Cc: Roman Zippel <[EMAIL PROTECTED]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 include/linux/timer.h |   10 ++++++++++
 kernel/hrtimer.c      |    2 +-
 kernel/timer.c        |   14 +++++++++++---
 3 files changed, 22 insertions(+), 4 deletions(-)

diff --git a/include/linux/timer.h b/include/linux/timer.h
index fb5edaa..bd0af32 100644
--- a/include/linux/timer.h
+++ b/include/linux/timer.h
@@ -61,7 +61,17 @@ extern int del_timer(struct timer_list * timer);
 extern int __mod_timer(struct timer_list *timer, unsigned long expires);
 extern int mod_timer(struct timer_list *timer, unsigned long expires);
 
+/*
+ * Return when the next timer-wheel timeout occurs (in absolute jiffies),
+ * locks the timer base:
+ */
 extern unsigned long next_timer_interrupt(void);
+/*
+ * Return when the next timer-wheel timeout occurs (in absolute jiffies),
+ * locks the timer base and does the comparison against the given
+ * jiffie.
+ */
+extern unsigned long get_next_timer_interrupt(unsigned long now);
 
 /**
  * add_timer - start a timer
diff --git a/kernel/hrtimer.c b/kernel/hrtimer.c
index c0fdb9b..bd57ef4 100644
--- a/kernel/hrtimer.c
+++ b/kernel/hrtimer.c
@@ -533,7 +533,7 @@ ktime_t hrtimer_get_remaining(const struct hrtimer *timer)
 }
 EXPORT_SYMBOL_GPL(hrtimer_get_remaining);
 
-#ifdef CONFIG_NO_IDLE_HZ
+#if defined(CONFIG_NO_IDLE_HZ) || defined(CONFIG_NO_HZ)
 /**
  * hrtimer_get_next_event - get the time until next expiry event
  *
diff --git a/kernel/timer.c b/kernel/timer.c
index 201bee0..6d843e1 100644
--- a/kernel/timer.c
+++ b/kernel/timer.c
@@ -591,7 +591,7 @@ static inline void __run_timers(tvec_base_t *base)
        spin_unlock_irq(&base->lock);
 }
 
-#ifdef CONFIG_NO_IDLE_HZ
+#if defined(CONFIG_NO_IDLE_HZ) || defined(CONFIG_NO_HZ)
 /*
  * Find out when the next timer event is due to happen. This
  * is used on S/390 to stop all activity when a cpus is idle.
@@ -687,10 +687,10 @@ static unsigned long cmp_next_hrtimer_event(unsigned long 
now,
 /**
  * next_timer_interrupt - return the jiffy of the next pending timer
  */
-unsigned long next_timer_interrupt(void)
+unsigned long get_next_timer_interrupt(unsigned long now)
 {
        tvec_base_t *base = __get_cpu_var(tvec_bases);
-       unsigned long expires, now = jiffies;
+       unsigned long expires;
 
        spin_lock(&base->lock);
        expires = __next_timer_interrupt(base);
@@ -701,6 +701,14 @@ unsigned long next_timer_interrupt(void)
 
        return cmp_next_hrtimer_event(now, expires);
 }
+
+#ifdef CONFIG_NO_IDLE_HZ
+unsigned long next_timer_interrupt(void)
+{
+       return get_next_timer_interrupt(jiffies);
+}
+#endif
+
 #endif
 
 /******************************************************************/
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to