diff options
author | Kanoj Sarcar <kanoj@engr.sgi.com> | 2000-04-12 20:39:39 +0000 |
---|---|---|
committer | Kanoj Sarcar <kanoj@engr.sgi.com> | 2000-04-12 20:39:39 +0000 |
commit | a0a1b243d81d50fe7811b745803584908fd15785 (patch) | |
tree | 9780c1c3f81917eb9f6bf76332693af997afa01e | |
parent | 435c9faaacd28deec6a7711786ec36b6cb363720 (diff) |
Allow the low level ISR to be able to handle intrs on cpu A or B.
-rw-r--r-- | arch/mips64/sgi-ip27/ip27-irq.c | 10 |
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); |