• oftedal's avatar
    Do not skip interrupt sources in sun4d interrupt handler and acknowledge interrupts correctly · ea160584
    oftedal authored
    During the introduction of genirq on sparc32 bugs were introduced in
    the interrupt handler for sun4d. The interrupts handler checks the status
    of the various sbus interfaces in the system and generates a virtual
    interrupt, based upon the location of the interrupt source. This lookup
    was broken by restructuring the code in such a way that index and shift
    operations were performed prior to comparing this against the values
    read from the interrupt controllers.
    
    This could cause the handler to loop eternally as the interrupt source
    could be skipped before any check was performed. Additionally
    sun4d_encode_irq performs shifting internally, so it should not be performed
    twice.
    
    In sun4d_unmask interrupts were not correctly acknowledged, as the
    corresponding bit it the interrupt mask was not actually cleared.
    Signed-off-by: default avatarKjetil Oftedal <oftedal@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    ea160584
sun4d_irq.c 11.9 KB