On Wed, May 21, 2008 at 9:39 AM, Philip Balister <philip@xxxxxxxxxxxx> wrote: > Paul Walmsley wrote: >> >> Hello Kyungmin, >> >> On Wed, 21 May 2008, Kyungmin Park wrote: >> >>> On Wed, May 21, 2008 at 3:21 AM, Paul Walmsley <paul@xxxxxxxxx> wrote: >>>> >>>> static void omap_mask_irq(unsigned int irq) >>>> { >>>> - int offset = (irq >> 5) << 5; >>>> + int offset = irq & (~(IRQ_BITS_PER_REG - 1)); >>>> >>>> - if (irq >= 64) >>>> - irq %= 64; >>>> - else if (irq >= 32) >>>> - irq %= 32; >>>> + irq %= IRQ_BITS_PER_REG; >>> >>> Is it the right conversion? >>> If the irq is greater then 32 and less then or equal to 64 it's >>> result is different. >>> E.g, If irq is 63 then original irq is 63, but new code is 31 >> >> Hmm, in that condition, the result looks the same to me: irq % 32, either >> way? >> >> More practically, if you look at what it does with that irq variable >> afterwards, it seems to be a bug if irq is ever greater than 31: >> >> intc_bank_write_reg(1 << irq, &irq_banks[0], INTC_MIR_CLEAR0 + >> offset); >> >> I think the only case where the new code would work differently than the >> previous code is if irq > 95. But that would be a bug, since the shift >> value would then be > 32, for a 32-bit register. >> >>> And if this code is right, how about to use mask instead of modulo op? >>> irq &= (IRQ_BITS_PER_REG - 1); >> >> Hehe, very good point, that would probably save even more cycles! If you >> agree with the above, perhaps I can convert the code to use that also, and >> add your Signed-off-by also? > > On some code where I used % to detect a counter passing multiples of a > certain number, oprofile revealed that the % operator burned a lot of CPU > cycles. I suspect this had to do with the counter increasing to very large > numbers, but ever since, I've tried to avoid the % operator in critical > paths. > Yes, In embedded environment, we should avoid the multiple, divide, and modulo op as much as possible. It's best to use the bit operations. Signed-off-by: Kyungmin Park <kyungmin.park@xxxxxxxxxxx> BR, Kyungmin Park -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html