]> Git Repo - J-linux.git/commitdiff
Merge branch 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
authorLinus Torvalds <[email protected]>
Mon, 5 Oct 2009 19:04:16 +0000 (12:04 -0700)
committerLinus Torvalds <[email protected]>
Mon, 5 Oct 2009 19:04:16 +0000 (12:04 -0700)
* 'timers-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip:
  hrtimer: Remove overly verbose "switch to high res mode" message

1  2 
kernel/hrtimer.c

diff --combined kernel/hrtimer.c
index 6d7020490f94fdc3563f81c0582935492f724a34,42672790ee13ad8bf234ce5191f4145a737c8a1b..3e1c36e7998fdbeffa17142bade5c358c61a2857
@@@ -509,14 -509,13 +509,14 @@@ static inline int hrtimer_hres_active(v
   * next event
   * Called with interrupts disabled and base->lock held
   */
 -static void hrtimer_force_reprogram(struct hrtimer_cpu_base *cpu_base)
 +static void
 +hrtimer_force_reprogram(struct hrtimer_cpu_base *cpu_base, int skip_equal)
  {
        int i;
        struct hrtimer_clock_base *base = cpu_base->clock_base;
 -      ktime_t expires;
 +      ktime_t expires, expires_next;
  
 -      cpu_base->expires_next.tv64 = KTIME_MAX;
 +      expires_next.tv64 = KTIME_MAX;
  
        for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++, base++) {
                struct hrtimer *timer;
                 */
                if (expires.tv64 < 0)
                        expires.tv64 = 0;
 -              if (expires.tv64 < cpu_base->expires_next.tv64)
 -                      cpu_base->expires_next = expires;
 +              if (expires.tv64 < expires_next.tv64)
 +                      expires_next = expires;
        }
  
 +      if (skip_equal && expires_next.tv64 == cpu_base->expires_next.tv64)
 +              return;
 +
 +      cpu_base->expires_next.tv64 = expires_next.tv64;
 +
        if (cpu_base->expires_next.tv64 != KTIME_MAX)
                tick_program_event(cpu_base->expires_next, 1);
  }
@@@ -623,7 -617,7 +623,7 @@@ static void retrigger_next_event(void *
        base->clock_base[CLOCK_REALTIME].offset =
                timespec_to_ktime(realtime_offset);
  
 -      hrtimer_force_reprogram(base);
 +      hrtimer_force_reprogram(base, 0);
        spin_unlock(&base->lock);
  }
  
@@@ -726,8 -720,6 +726,6 @@@ static int hrtimer_switch_to_hres(void
        /* "Retrigger" the interrupt to get things going */
        retrigger_next_event(NULL);
        local_irq_restore(flags);
-       printk(KERN_DEBUG "Switched to high resolution mode on CPU %d\n",
-              smp_processor_id());
        return 1;
  }
  
  static inline int hrtimer_hres_active(void) { return 0; }
  static inline int hrtimer_is_hres_enabled(void) { return 0; }
  static inline int hrtimer_switch_to_hres(void) { return 0; }
 -static inline void hrtimer_force_reprogram(struct hrtimer_cpu_base *base) { }
 +static inline void
 +hrtimer_force_reprogram(struct hrtimer_cpu_base *base, int skip_equal) { }
  static inline int hrtimer_enqueue_reprogram(struct hrtimer *timer,
                                            struct hrtimer_clock_base *base,
                                            int wakeup)
@@@ -880,29 -871,19 +878,29 @@@ static void __remove_hrtimer(struct hrt
                             struct hrtimer_clock_base *base,
                             unsigned long newstate, int reprogram)
  {
 -      if (timer->state & HRTIMER_STATE_ENQUEUED) {
 -              /*
 -               * Remove the timer from the rbtree and replace the
 -               * first entry pointer if necessary.
 -               */
 -              if (base->first == &timer->node) {
 -                      base->first = rb_next(&timer->node);
 -                      /* Reprogram the clock event device. if enabled */
 -                      if (reprogram && hrtimer_hres_active())
 -                              hrtimer_force_reprogram(base->cpu_base);
 +      if (!(timer->state & HRTIMER_STATE_ENQUEUED))
 +              goto out;
 +
 +      /*
 +       * Remove the timer from the rbtree and replace the first
 +       * entry pointer if necessary.
 +       */
 +      if (base->first == &timer->node) {
 +              base->first = rb_next(&timer->node);
 +#ifdef CONFIG_HIGH_RES_TIMERS
 +              /* Reprogram the clock event device. if enabled */
 +              if (reprogram && hrtimer_hres_active()) {
 +                      ktime_t expires;
 +
 +                      expires = ktime_sub(hrtimer_get_expires(timer),
 +                                          base->offset);
 +                      if (base->cpu_base->expires_next.tv64 == expires.tv64)
 +                              hrtimer_force_reprogram(base->cpu_base, 1);
                }
 -              rb_erase(&timer->node, &base->active);
 +#endif
        }
 +      rb_erase(&timer->node, &base->active);
 +out:
        timer->state = newstate;
  }
  
This page took 0.060399 seconds and 4 git commands to generate.