LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: viresh kumar <viresh.kumar@linaro.org>
To: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>,
Linaro Kernel Mailman List <linaro-kernel@lists.linaro.org>,
Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 2/2] hrtimer: create for_each_active_base() to iterate over active clock-bases
Date: Fri, 03 Apr 2015 11:12:31 +0530 [thread overview]
Message-ID: <551E2847.8020201@linaro.org> (raw)
In-Reply-To: <20150402134519.GA23123@twins.programming.kicks-ass.net>
On 2 April 2015 at 19:15, Peter Zijlstra <peterz@infradead.org> wrote:
> On Thu, Apr 02, 2015 at 04:21:22PM +0530, Viresh Kumar wrote:
>> +#define for_each_active_base(_index, _base, _cpu_base, _active_bases) \
>> + for ((_active_bases) = (_cpu_base)->active_bases; \
>> + (_index) = ffs(_active_bases), \
>> + (_base) = (_cpu_base)->clock_base + (_index) - 1, (_index); \
>> + (_active_bases) &= ~(1 << ((_index) - 1)))
>
> Can't use ffs here, some people end up using asm-generic/bitops/ffs.h
> and that sucks.
>
> Esp for small vectors like here, the unconditional iteration is faster.
Okay what about this instead (This is the best I could write :).) ?
+static inline int __next_bit(unsigned int active_bases, int bit)
+{
+ do {
+ if (active_bases & (1 << bit))
+ return bit;
+ } while (++bit < HRTIMER_MAX_CLOCK_BASES);
+
+ /* We should never reach here */
+ return 0;
+}
+/*
+ * for_each_active_base: iterate over all active clock bases
+ * @_bit: 'int' variable for internal purpose
+ * @_base: holds pointer to a active clock base
+ * @_cpu_base: cpu base to iterate on
+ * @_active_bases: 'unsigned int' variable for internal purpose
+ */
+#define for_each_active_base(_bit, _base, _cpu_base, _active_bases) \
+ for ((_active_bases) = (_cpu_base)->active_bases, (_bit) = -1; \
+ (_active_bases) && \
+ ((_bit) = __next_bit(_active_bases, ++_bit), \
+ (_base) = (_cpu_base)->clock_base + _bit); \
+ (_active_bases) &= ~(1 << (_bit)))
+
Tested it well with the help of: http://pastebin.com/cYyB513D, with
inputs from 0 to 15.
I will send it formally if it looks fine to you ..
prev parent reply other threads:[~2015-04-03 5:42 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-02 10:51 [PATCH 0/2] hrtimer: Only iterate over active bases Viresh Kumar
2015-04-02 10:51 ` [PATCH 1/2] hrtimer: update '->active_bases' before calling hrtimer_force_reprogram() Viresh Kumar
2015-04-02 13:47 ` Peter Zijlstra
2015-04-02 13:53 ` Viresh Kumar
2015-04-02 14:16 ` Peter Zijlstra
2015-04-02 14:23 ` Viresh Kumar
2015-04-02 10:51 ` [PATCH 2/2] hrtimer: create for_each_active_base() to iterate over active clock-bases Viresh Kumar
2015-04-02 13:45 ` Peter Zijlstra
2015-04-03 5:42 ` viresh kumar [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=551E2847.8020201@linaro.org \
--to=viresh.kumar@linaro.org \
--cc=linaro-kernel@lists.linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--subject='Re: [PATCH 2/2] hrtimer: create for_each_active_base() to iterate over active clock-bases' \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).