| From: Anna-Maria Gleixner <anna-maria@linutronix.de> |
| Date: Thu, 31 Aug 2017 11:03:05 +0000 |
| Subject: [PATCH 08/25] hrtimer: Reduce conditional code (expires_next, |
| next_timer) |
| |
| 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 <anna-maria@linutronix.de> |
| Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> |
| --- |
| 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 |
| @@ -153,16 +153,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) |
| @@ -170,9 +170,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 |
| @@ -455,9 +452,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) |
| @@ -648,14 +643,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() |
| @@ -720,7 +707,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 */ |
| @@ -1570,7 +1556,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; |
| } |
| |