The hrtimer_cpu_base struct member expires_next and next_timer are conditional members (CONFIG_HIGH_RES_TIMERS). This makes the hrtimer code more complex and harder to understand than it actually is. Reduce the conditionals related to those two struct members. Signed-off-by: Anna-Maria Gleixner --- include/linux/hrtimer.h | 10 +++++----- kernel/time/hrtimer.c | 24 +++++------------------- 2 files changed, 10 insertions(+), 24 deletions(-) --- a/include/linux/hrtimer.h +++ b/include/linux/hrtimer.h @@ -160,13 +160,13 @@ enum hrtimer_base_type { * @in_hrtirq: hrtimer_interrupt() is currently executing * @hres_active: State of high resolution mode * @hang_detected: The last hrtimer interrupt detected a hang - * @expires_next: absolute time of the next event, is required for remote - * hrtimer enqueue - * @next_timer: Pointer to the first expiring timer * @nr_events: Total number of hrtimer interrupt events * @nr_retries: Total number of hrtimer interrupt retries * @nr_hangs: Total number of hrtimer interrupt hangs * @max_hang_time: Maximum time spent in hrtimer_interrupt + * @expires_next: absolute time of the next event, is required for remote + * hrtimer enqueue + * @next_timer: Pointer to the first expiring timer * @clock_base: array of clock bases for this cpu * * Note: next_timer is just an optimization for __remove_hrtimer(). @@ -184,13 +184,13 @@ struct hrtimer_cpu_base { #ifdef CONFIG_HIGH_RES_TIMERS unsigned int in_hrtirq : 1, hang_detected : 1; - ktime_t expires_next; - struct hrtimer *next_timer; unsigned int nr_events; unsigned int nr_retries; unsigned int nr_hangs; unsigned int max_hang_time; #endif + ktime_t expires_next; + struct hrtimer *next_timer; struct hrtimer_clock_base clock_base[HRTIMER_MAX_CLOCK_BASES]; } ____cacheline_aligned; --- a/kernel/time/hrtimer.c +++ b/kernel/time/hrtimer.c @@ -154,16 +154,16 @@ struct hrtimer_clock_base *lock_hrtimer_ } /* - * 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. + * With high resolution timers enabled 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. * * Called with cpu_base->lock of target cpu held. */ static int hrtimer_check_target(struct hrtimer *timer, struct hrtimer_clock_base *new_base) { -#ifdef CONFIG_HIGH_RES_TIMERS ktime_t expires; if (!new_base->cpu_base->hres_active) @@ -171,9 +171,6 @@ hrtimer_check_target(struct hrtimer *tim expires = ktime_sub(hrtimer_get_expires(timer), new_base->offset); return expires <= new_base->cpu_base->expires_next; -#else - return 0; -#endif } #ifdef CONFIG_NO_HZ_COMMON @@ -456,9 +453,7 @@ static inline void debug_deactivate(stru static inline void hrtimer_update_next_timer(struct hrtimer_cpu_base *cpu_base, struct hrtimer *timer) { -#ifdef CONFIG_HIGH_RES_TIMERS cpu_base->next_timer = timer; -#endif } static ktime_t __hrtimer_get_next_event(struct hrtimer_cpu_base *cpu_base) @@ -649,14 +644,6 @@ static void hrtimer_reprogram(struct hrt } /* - * 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 * * Called with interrupts disabled via on_each_cpu() @@ -721,7 +708,6 @@ static inline int hrtimer_reprogram(stru { return 0; } -static inline void hrtimer_init_hres(struct hrtimer_cpu_base *base) { } static inline void retrigger_next_event(void *arg) { } #endif /* CONFIG_HIGH_RES_TIMERS */ @@ -1590,7 +1576,7 @@ int hrtimers_prepare_cpu(unsigned int cp cpu_base->cpu = cpu; cpu_base->hres_active = 0; - hrtimer_init_hres(cpu_base); + cpu_base->expires_next = KTIME_MAX; return 0; }