From: Frederic Weisbecker <fweisbec@gmail.com>
To: Joe Perches <joe@perches.com>
Cc: Andrew Morton <akpm@linux-foundation.org>, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 1/3] softirq: Use ffs in __do_softirq
Date: Mon, 9 Dec 2013 19:44:55 +0100 [thread overview]
Message-ID: <20131209184454.GA1811@localhost.localdomain> (raw)
In-Reply-To: <8d10077333476c5c0e054cf060006999cf150f0c.1384656563.git.joe@perches.com>
On Sun, Nov 17, 2013 at 01:55:10AM -0800, Joe Perches wrote:
> Possible speed improvement of the __do_softirq function by using ffs
> instead of using a while loop with an & 1 test then single bit shift.
>
> Signed-off-by: Joe Perches <joe@perches.com>
> ---
> kernel/softirq.c | 43 ++++++++++++++++++++++---------------------
> 1 file changed, 22 insertions(+), 21 deletions(-)
>
> diff --git a/kernel/softirq.c b/kernel/softirq.c
> index 11025cc..7be95d7 100644
> --- a/kernel/softirq.c
> +++ b/kernel/softirq.c
> @@ -219,6 +219,7 @@ asmlinkage void __do_softirq(void)
> int cpu;
> unsigned long old_flags = current->flags;
> int max_restart = MAX_SOFTIRQ_RESTART;
> + int softirq_bit;
>
> /*
> * Mask out PF_MEMALLOC s current task context is borrowed for the
> @@ -242,30 +243,30 @@ restart:
>
> h = softirq_vec;
>
> - do {
> - if (pending & 1) {
> - unsigned int vec_nr = h - softirq_vec;
> - int prev_count = preempt_count();
> -
> - kstat_incr_softirqs_this_cpu(vec_nr);
> -
> - trace_softirq_entry(vec_nr);
> - h->action(h);
> - trace_softirq_exit(vec_nr);
> - if (unlikely(prev_count != preempt_count())) {
> - printk(KERN_ERR "huh, entered softirq %u %s %p"
> - "with preempt_count %08x,"
> - " exited with %08x?\n", vec_nr,
> - softirq_to_name[vec_nr], h->action,
> - prev_count, preempt_count());
> - preempt_count_set(prev_count);
> - }
> + while ((softirq_bit = ffs(pending))) {
> + unsigned int vec_nr;
> + int prev_count;
> +
> + h += softirq_bit - 1;
Perhaps using for_each_set_bit() would simplify that more?
> +
> + vec_nr = h - softirq_vec;
> + prev_count = preempt_count();
>
> - rcu_bh_qs(cpu);
> + kstat_incr_softirqs_this_cpu(vec_nr);
> +
> + trace_softirq_entry(vec_nr);
> + h->action(h);
> + trace_softirq_exit(vec_nr);
> + if (unlikely(prev_count != preempt_count())) {
> + printk(KERN_ERR "huh, entered softirq %u %s %p with preempt_count %08x, exited with %08x?\n",
> + vec_nr, softirq_to_name[vec_nr], h->action,
> + prev_count, preempt_count());
> + preempt_count_set(prev_count);
> }
> + rcu_bh_qs(cpu);
> h++;
> - pending >>= 1;
> - } while (pending);
> + pending >>= softirq_bit;
> + }
>
> local_irq_disable();
>
> --
> 1.8.1.2.459.gbcd45b4.dirty
>
next prev parent reply other threads:[~2013-12-09 18:45 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-11-17 9:55 [PATCH 0/3] softirq: possible speedup and neatenings Joe Perches
2013-11-17 9:55 ` [PATCH 1/3] softirq: Use ffs in __do_softirq Joe Perches
2013-12-09 18:44 ` Frederic Weisbecker [this message]
2013-12-09 18:56 ` Joe Perches
2013-12-09 19:13 ` Frederic Weisbecker
2013-11-17 9:55 ` [PATCH 2/3] softirq: Convert printks to pr_<level> Joe Perches
2013-11-17 9:55 ` [PATCH 3/3] softirq: Use const char * const for softirq_to_name, whitespace neatening Joe Perches
2013-12-24 15:19 ` Wang YanQing
2013-12-24 15:27 ` Joe Perches
2013-12-09 17:22 ` [PATCH 0/3] softirq: possible speedup and neatenings Joe Perches
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=20131209184454.GA1811@localhost.localdomain \
--to=fweisbec@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=joe@perches.com \
--cc=linux-kernel@vger.kernel.org \
/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
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.