Hi Russell, On 11/30/2016 04:21 AM, Russell King - ARM Linux wrote: > On Tue, Nov 29, 2016 at 05:47:12PM -0600, Grygorii Strashko wrote: >> 2) Should these function be called for each processed irq? >> >> >> HW IRQ: >> switch (IRQ mode) >> ... >> while (irq = get_pending_irq()) { >> ... >> irq_enter() >> handle(irq) - execute hw_irq_hadler >> irq_exit() >> } >> ... >> switch > > We tend to do (2) as a general rule, which isn't much different from what > other architectures do - even if they have a method to directly enter > through vectors (eg, x86) the effect of two pending interrupts is that one > will run after each other, and there will be an intervening exit -> entry. > > In the case of ARM CPUs, if the interrupt signal is active, you vector > back to the interrupt handler as soon as you exit back to the parent > context without executing any parent context instructions. > > So, we have the choice of going through all the IRQ entry code, processing > one interrupt, and returning only to then re-vector back through the IRQ > entry code, or we can process all the pending IRQs that we can see at that > time. > > The former method wastes all the CPU cycles getting from the parent context > to the IRQ context for each and every interrupt. > Thanks a lot for your detailed explanation. When I've asked this question my intention was to understand possibility of calling irq_enter()/irq_exit() only once for the case (2), like: HW IRQ: switch (IRQ mode) ... irq_enter() while (irq = get_pending_irq()) { ... handle(irq) - execute hw_irq_hadler } irq_exit() ... switch -- regards, -grygorii -- To unsubscribe from this list: send the line "unsubscribe linux-rt-users" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html