• Thomas Gleixner's avatar
    arm: Ns9xxx: Remove private irq flow handler · 68293105
    Thomas Gleixner authored
    handle_prio_irq is almost identical with handle_fasteoi_irq. The
    subtle differences are
    
    1) The handler checks for IRQ_DISABLED after the device handler has
       been called. In case it's set it masks the interrupt.
    
    2) When the handler sees IRQ_DISABLED on entry it masks the interupt
       in the same way as handle_fastoei_irq, but does not set the
       IRQ_PENDING flag.
    
    3) Instead of gracefully handling a recursive interrupt it crashes the
       kernel.
    
    #1 is just relevant when a device handler calls disable_irq_nosync()
       and it does not matter whether we mask the interrupt right away or
       not. We handle lazy masking for disable_irq anyway, so there is no
       real reason to have this extra mask in place.
    
    #2 will prevent the resend of a pending interrupt, which can result in
       lost interrupts for edge type interrupts. For level type interrupts
       the resend is a noop in the generic code. According to the
       datasheet all interrupts are level type, so marking them as such
       will result in the exact same behaviour as the private
       handle_prio_irq implementation.
    
    #3 is just stupid. Crashing the kernel instead of handling a problem
       gracefully is just wrong. With the current semantics- all handlers
       run with interrupts disabled - this is even more wrong.
    
    Rename ack to eoi, remove the unused mask_ack, switch to
    handle_fasteoi_irq and remove the private function.
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Acked-by: default avatarUwe Kleine-Koenig <u.kleine-koenig@pengutronix.de>
    Cc: linux-arm-kernel@lists.infradead.org
    LKML-Reference: <20110202212552.299898447@linutronix.de>
    68293105
irq.c 1.77 KB