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/

Reply via email to