On 04/15/2015 02:38 AM, Thomas Gleixner wrote: >>Now that we have the active_bases field in sync we can use it for
This sentence appears a bit ambiguous. I am guessing you are referring to what the first patch in this series did, in which case wouldn't it be better if it is stated a bit more elaborately like 'Now that it is guaranteed that active_bases field will be in sync with the timerqueue on the corresponding clock base' ? It took me a while to figure out what the statement was referring to. >>iterating over the clock bases. This allows to break out early if no >>more active clock bases are available and avoids touching the cache >>lines of inactive clock bases. >> >>Signed-off-by: Thomas Gleixner <t...@linutronix.de> >>--- Regards Preeti U Murthy >> kernel/time/hrtimer.c | 17 ++++++++--------- >> 1 file changed, 8 insertions(+), 9 deletions(-) >> >>Index: tip/kernel/time/hrtimer.c >>=================================================================== >>--- tip.orig/kernel/time/hrtimer.c >>+++ tip/kernel/time/hrtimer.c >>@@ -419,16 +419,16 @@ static ktime_t __hrtimer_get_next_event( >> { >> struct hrtimer_clock_base *base = cpu_base->clock_base; >> ktime_t expires, expires_next = { .tv64 = KTIME_MAX }; >>- int i; >>+ unsigned int active = cpu_base->active_bases; >> >>- for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++, base++) { >>+ for (; active; base++, active >>= 1) { >> struct timerqueue_node *next; >> struct hrtimer *timer; >> >>- next = timerqueue_getnext(&base->active); >>- if (!next) >>+ if (!(active & 0x01)) >> continue; >> >>+ next = timerqueue_getnext(&base->active); >> timer = container_of(next, struct hrtimer, node); >> expires = ktime_sub(hrtimer_get_expires(timer), >>base->offset); >> if (expires.tv64 < expires_next.tv64) >>@@ -1206,17 +1206,16 @@ static void __run_hrtimer(struct hrtimer >> >> static void __hrtimer_run_queues(struct hrtimer_cpu_base *cpu_base, ktime_t >>now) >> { >>- int i; >>+ struct hrtimer_clock_base *base = cpu_base->clock_base; >>+ unsigned int active = cpu_base->active_bases; >> >>- for (i = 0; i < HRTIMER_MAX_CLOCK_BASES; i++) { >>- struct hrtimer_clock_base *base; >>+ for (; active; base++, active >>= 1) { >> struct timerqueue_node *node; >> ktime_t basenow; >> >>- if (!(cpu_base->active_bases & (1 << i))) >>+ if (!(active & 0x01)) >> continue; >> >>- base = cpu_base->clock_base + i; >> basenow = ktime_add(now, base->offset); >> >> while ((node = timerqueue_getnext(&base->active))) { >> -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/