* [PATCH] irqchip: mips-gic: Use for_each_set_bit to iterate over local IRQs
@ 2016-09-13 16:54 Paul Burton
2016-09-20 21:27 ` [tip:irq/core] irqchip/mips-gic: " tip-bot for Paul Burton
0 siblings, 1 reply; 2+ messages in thread
From: Paul Burton @ 2016-09-13 16:54 UTC (permalink / raw)
To: linux-mips
Cc: Paul Burton, Thomas Gleixner, Jason Cooper, Marc Zyngier,
linux-kernel
The MIPS GIC driver has previously iterated over bits set in a bitmap
representing pending local IRQs by calling find_first_bit, clearing that
bit then calling find_first_bit again until all bits are clear. If
multiple interrupts are pending then this is wasteful, as find_first_bit
will have to loop over the whole bitmap from the start. Use the
for_each_set_bit macro which performs exactly what we need here instead.
It will use find_next_bit and thus only scan over the relevant part of
the bitmap, and it makes the intent of the code clearer.
This makes the same change for local interrupts that commit cae750bae4e4
("irqchip: mips-gic: Use for_each_set_bit to iterate over IRQs") made
for shared interrupts.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Jason Cooper <jason@lakedaemon.net>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: linux-kernel@vger.kernel.org
Cc: linux-mips@linux-mips.org
---
Please feel free to fold this into cae750bae4e4 ("irqchip: mips-gic: Use
for_each_set_bit to iterate over IRQs") if you prefer.
---
drivers/irqchip/irq-mips-gic.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c
index 61856964..8f7d38b 100644
--- a/drivers/irqchip/irq-mips-gic.c
+++ b/drivers/irqchip/irq-mips-gic.c
@@ -518,18 +518,13 @@ static void gic_handle_local_int(bool chained)
bitmap_and(&pending, &pending, &masked, GIC_NUM_LOCAL_INTRS);
- intr = find_first_bit(&pending, GIC_NUM_LOCAL_INTRS);
- while (intr != GIC_NUM_LOCAL_INTRS) {
+ for_each_set_bit(intr, &pending, GIC_NUM_LOCAL_INTRS) {
virq = irq_linear_revmap(gic_irq_domain,
GIC_LOCAL_TO_HWIRQ(intr));
if (chained)
generic_handle_irq(virq);
else
do_IRQ(virq);
-
- /* go to next pending bit */
- bitmap_clear(&pending, intr, 1);
- intr = find_first_bit(&pending, GIC_NUM_LOCAL_INTRS);
}
}
--
2.9.3
^ permalink raw reply related [flat|nested] 2+ messages in thread
* [tip:irq/core] irqchip/mips-gic: Use for_each_set_bit to iterate over local IRQs
2016-09-13 16:54 [PATCH] irqchip: mips-gic: Use for_each_set_bit to iterate over local IRQs Paul Burton
@ 2016-09-20 21:27 ` tip-bot for Paul Burton
0 siblings, 0 replies; 2+ messages in thread
From: tip-bot for Paul Burton @ 2016-09-20 21:27 UTC (permalink / raw)
To: linux-tip-commits
Cc: jason, linux-kernel, paul.burton, marc.zyngier, mingo, tglx, hpa
Commit-ID: 0f4ed1580ce6c9499eba2a1ba013759700a5ed14
Gitweb: http://git.kernel.org/tip/0f4ed1580ce6c9499eba2a1ba013759700a5ed14
Author: Paul Burton <paul.burton@imgtec.com>
AuthorDate: Tue, 13 Sep 2016 17:54:27 +0100
Committer: Thomas Gleixner <tglx@linutronix.de>
CommitDate: Tue, 20 Sep 2016 23:21:55 +0200
irqchip/mips-gic: Use for_each_set_bit to iterate over local IRQs
The MIPS GIC driver has previously iterated over bits set in a bitmap
representing pending local IRQs by calling find_first_bit, clearing that
bit then calling find_first_bit again until all bits are clear. If
multiple interrupts are pending then this is wasteful, as find_first_bit
will have to loop over the whole bitmap from the start. Use the
for_each_set_bit macro which performs exactly what we need here instead.
It will use find_next_bit and thus only scan over the relevant part of
the bitmap, and it makes the intent of the code clearer.
This makes the same change for local interrupts that commit cae750bae4e4
("irqchip: mips-gic: Use for_each_set_bit to iterate over IRQs") made
for shared interrupts.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
Cc: Marc Zyngier <marc.zyngier@arm.com>
Cc: linux-mips@linux-mips.org
Cc: Jason Cooper <jason@lakedaemon.net>
Link: http://lkml.kernel.org/r/20160913165427.31686-1-paul.burton@imgtec.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
drivers/irqchip/irq-mips-gic.c | 7 +------
1 file changed, 1 insertion(+), 6 deletions(-)
diff --git a/drivers/irqchip/irq-mips-gic.c b/drivers/irqchip/irq-mips-gic.c
index 61856964..8f7d38b 100644
--- a/drivers/irqchip/irq-mips-gic.c
+++ b/drivers/irqchip/irq-mips-gic.c
@@ -518,18 +518,13 @@ static void gic_handle_local_int(bool chained)
bitmap_and(&pending, &pending, &masked, GIC_NUM_LOCAL_INTRS);
- intr = find_first_bit(&pending, GIC_NUM_LOCAL_INTRS);
- while (intr != GIC_NUM_LOCAL_INTRS) {
+ for_each_set_bit(intr, &pending, GIC_NUM_LOCAL_INTRS) {
virq = irq_linear_revmap(gic_irq_domain,
GIC_LOCAL_TO_HWIRQ(intr));
if (chained)
generic_handle_irq(virq);
else
do_IRQ(virq);
-
- /* go to next pending bit */
- bitmap_clear(&pending, intr, 1);
- intr = find_first_bit(&pending, GIC_NUM_LOCAL_INTRS);
}
}
^ permalink raw reply related [flat|nested] 2+ messages in thread
end of thread, other threads:[~2016-09-20 21:27 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-09-13 16:54 [PATCH] irqchip: mips-gic: Use for_each_set_bit to iterate over local IRQs Paul Burton
2016-09-20 21:27 ` [tip:irq/core] irqchip/mips-gic: " tip-bot for Paul Burton
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).