On Thu, Apr 04, 2013 at 03:16:14PM -0500, Jon Hunter wrote: > The OMAP GPIO interrupt service routine is checking each bit in the > GPIO interrupt status register to see which bits are set. It is not > efficient to check every bit especially if only a few bits are set. > Therefore, instead of checking every bit use the __ffs() function, > which returns the location of the first set bit, to find all the set > bits. > > This optimisation was suggested-by and developed in collaboration > with Felipe Balbi. > > Cc: Felipe Balbi <balbi@xxxxxx> > > Signed-off-by: Jon Hunter <jon-hunter@xxxxxx> looks alright: Reviewed-by: Felipe Balbi <balbi@xxxxxx> > --- > drivers/gpio/gpio-omap.c | 14 +++++++------- > 1 file changed, 7 insertions(+), 7 deletions(-) > > diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c > index 5af7acd..685e850 100644 > --- a/drivers/gpio/gpio-omap.c > +++ b/drivers/gpio/gpio-omap.c > @@ -689,7 +689,7 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc) > { > void __iomem *isr_reg = NULL; > u32 isr; > - unsigned int i; > + unsigned int bit; > struct gpio_bank *bank; > int unmasked = 0; > struct irq_chip *chip = irq_desc_get_chip(desc); > @@ -730,9 +730,9 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc) > if (!isr) > break; > > - for (i = 0; isr != 0; isr >>= 1, i++) { > - if (!(isr & 1)) > - continue; > + while (isr) { > + bit = __ffs(isr); > + isr &= ~(1 << bit); > > /* > * Some chips can't respond to both rising and falling > @@ -741,10 +741,10 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc) > * to respond to the IRQ for the opposite direction. > * This will be indicated in the bank toggle_mask. > */ > - if (bank->toggle_mask & (1 << i)) > - _toggle_gpio_edge_triggering(bank, i); > + if (bank->toggle_mask & (1 << bit)) > + _toggle_gpio_edge_triggering(bank, bit); > > - generic_handle_irq(irq_find_mapping(bank->domain, i)); > + generic_handle_irq(irq_find_mapping(bank->domain, bit)); > } > } > /* if bank has any level sensitive GPIO pin interrupt > -- > 1.7.10.4 > -- balbi
Attachment:
signature.asc
Description: Digital signature