summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorKanoj Sarcar <kanoj@engr.sgi.com>2000-04-12 20:39:39 +0000
committerKanoj Sarcar <kanoj@engr.sgi.com>2000-04-12 20:39:39 +0000
commita0a1b243d81d50fe7811b745803584908fd15785 (patch)
tree9780c1c3f81917eb9f6bf76332693af997afa01e /arch
parent435c9faaacd28deec6a7711786ec36b6cb363720 (diff)
Allow the low level ISR to be able to handle intrs on cpu A or B.
Diffstat (limited to 'arch')
-rw-r--r--arch/mips64/sgi-ip27/ip27-irq.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/arch/mips64/sgi-ip27/ip27-irq.c b/arch/mips64/sgi-ip27/ip27-irq.c
index 31d53c897..cae8fab2b 100644
--- a/arch/mips64/sgi-ip27/ip27-irq.c
+++ b/arch/mips64/sgi-ip27/ip27-irq.c
@@ -159,20 +159,22 @@ void ip27_do_irq(struct pt_regs *regs)
{
int irq, swlevel;
hubreg_t pend0, mask0;
+ int pi_int_mask0 = ((cputoslice(smp_processor_id()) == 0) ?
+ PI_INT_MASK0_A : PI_INT_MASK0_B);
/* copied from Irix intpend0() */
while (((pend0 = LOCAL_HUB_L(PI_INT_PEND0)) &
- (mask0 = LOCAL_HUB_L(PI_INT_MASK0_A))) != 0) {
+ (mask0 = LOCAL_HUB_L(pi_int_mask0))) != 0) {
do {
swlevel = ms1bit(pend0);
- LOCAL_HUB_S(PI_INT_MASK0_A, mask0 & ~(1 << swlevel));
+ LOCAL_HUB_S(pi_int_mask0, mask0 & ~(1 << swlevel));
LOCAL_HUB_S(PI_INT_PEND_MOD, swlevel);
- LOCAL_HUB_L(PI_INT_MASK0_A); /* Flush */
+ LOCAL_HUB_L(pi_int_mask0); /* Flush */
/* "map" swlevel to irq */
irq = SWLEVEL_TO_IRQ(swlevel);
do_IRQ(irq, regs);
/* reset INT_MASK0 register */
- LOCAL_HUB_S(PI_INT_MASK0_A, mask0);
+ LOCAL_HUB_S(pi_int_mask0, mask0);
/* clear bit in pend0 */
pend0 ^= 1ULL << swlevel;
} while (pend0);