|
@@ -154,26 +154,21 @@ struct hrtimer_clock_base *lock_hrtimer_base(const struct hrtimer *timer,
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
- * With HIGHRES=y we do not migrate the timer when it is expiring
|
|
|
|
- * before the next event on the target cpu because we cannot reprogram
|
|
|
|
- * the target cpu hardware and we would cause it to fire late.
|
|
|
|
|
|
+ * We do not migrate the timer when it is expiring before the next
|
|
|
|
+ * event on the target cpu. When high resolution is enabled, we cannot
|
|
|
|
+ * reprogram the target cpu hardware and we would cause it to fire
|
|
|
|
+ * late. To keep it simple, we handle the high resolution enabled and
|
|
|
|
+ * disabled case similar.
|
|
*
|
|
*
|
|
* Called with cpu_base->lock of target cpu held.
|
|
* Called with cpu_base->lock of target cpu held.
|
|
*/
|
|
*/
|
|
static int
|
|
static int
|
|
hrtimer_check_target(struct hrtimer *timer, struct hrtimer_clock_base *new_base)
|
|
hrtimer_check_target(struct hrtimer *timer, struct hrtimer_clock_base *new_base)
|
|
{
|
|
{
|
|
-#ifdef CONFIG_HIGH_RES_TIMERS
|
|
|
|
ktime_t expires;
|
|
ktime_t expires;
|
|
|
|
|
|
- if (!new_base->cpu_base->hres_active)
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
expires = ktime_sub(hrtimer_get_expires(timer), new_base->offset);
|
|
expires = ktime_sub(hrtimer_get_expires(timer), new_base->offset);
|
|
return expires <= new_base->cpu_base->expires_next;
|
|
return expires <= new_base->cpu_base->expires_next;
|
|
-#else
|
|
|
|
- return 0;
|
|
|
|
-#endif
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static inline
|
|
static inline
|
|
@@ -656,14 +651,6 @@ static void hrtimer_reprogram(struct hrtimer *timer,
|
|
tick_program_event(expires, 1);
|
|
tick_program_event(expires, 1);
|
|
}
|
|
}
|
|
|
|
|
|
-/*
|
|
|
|
- * Initialize the high resolution related parts of cpu_base
|
|
|
|
- */
|
|
|
|
-static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base)
|
|
|
|
-{
|
|
|
|
- base->expires_next = KTIME_MAX;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* Retrigger next event is called after clock was set
|
|
* Retrigger next event is called after clock was set
|
|
*
|
|
*
|
|
@@ -729,7 +716,6 @@ static inline int hrtimer_reprogram(struct hrtimer *timer,
|
|
{
|
|
{
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
-static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base) { }
|
|
|
|
static inline void retrigger_next_event(void *arg) { }
|
|
static inline void retrigger_next_event(void *arg) { }
|
|
|
|
|
|
#endif /* CONFIG_HIGH_RES_TIMERS */
|
|
#endif /* CONFIG_HIGH_RES_TIMERS */
|
|
@@ -1599,7 +1585,7 @@ int hrtimers_prepare_cpu(unsigned int cpu)
|
|
|
|
|
|
cpu_base->cpu = cpu;
|
|
cpu_base->cpu = cpu;
|
|
cpu_base->hres_active = 0;
|
|
cpu_base->hres_active = 0;
|
|
- hrtimer_init_hres(cpu_base);
|
|
|
|
|
|
+ cpu_base->expires_next = KTIME_MAX;
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|