]> git.baikalelectronics.ru Git - kernel.git/commit
Do not skip interrupt sources in sun4d interrupt handler and acknowledge interrupts...
authoroftedal <oftedal@gmail.com>
Wed, 1 Jun 2011 11:04:20 +0000 (11:04 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 7 Jun 2011 23:06:33 +0000 (16:06 -0700)
commit8f875380a5409d589513fe8ccd59a8a8c2ed55dc
tree87c6f45332556a44b55646ce5bc905a001883a95
parentf7725b6d1155437d9182d162b7d33d4f94257b0f
Do not skip interrupt sources in sun4d interrupt handler and acknowledge interrupts correctly

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: Kjetil Oftedal <oftedal@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc/kernel/sun4d_irq.c