diff options
author | Kanoj Sarcar <kanoj@engr.sgi.com> | 2000-04-12 21:19:50 +0000 |
---|---|---|
committer | Kanoj Sarcar <kanoj@engr.sgi.com> | 2000-04-12 21:19:50 +0000 |
commit | acc376bc74201609a348fe00534d06e6780b4a91 (patch) | |
tree | 697cc5c1a895348fef513b5705b05e344b3f2c17 /arch | |
parent | a0a1b243d81d50fe7811b745803584908fd15785 (diff) |
The state of the two interrupt mask registers for the 128 intr levels
for each cpu in the hub is now stored in the per processor data area.
Diffstat (limited to 'arch')
-rw-r--r-- | arch/mips64/sgi-ip27/ip27-irq.c | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/arch/mips64/sgi-ip27/ip27-irq.c b/arch/mips64/sgi-ip27/ip27-irq.c index cae8fab2b..11d39537e 100644 --- a/arch/mips64/sgi-ip27/ip27-irq.c +++ b/arch/mips64/sgi-ip27/ip27-irq.c @@ -204,10 +204,17 @@ static unsigned int bridge_startup(unsigned int irq) * "map" irq to a swlevel greater than 6 since the first 6 bits * of INT_PEND0 are taken */ +#if 0 + /* Get this to work */ + intr_connect_level(smp_processor_id(), swlevel); +#else swlevel = IRQ_TO_SWLEVEL(irq); br = LOCAL_HUB_L(PI_INT_MASK0_A); LOCAL_HUB_S(PI_INT_MASK0_A, br | (1 << swlevel)); LOCAL_HUB_L(PI_INT_MASK0_A); /* Flush */ + cpu_data[smp_processor_id()].p_intmasks.intpend0_masks[0] |= + (1 << swlevel); +#endif bridge->b_int_addr[pin].addr = 0x20000 | swlevel; bridge->b_int_enable |= (1 << pin); @@ -264,11 +271,17 @@ static unsigned int bridge_shutdown(unsigned int irq) * map irq to a swlevel greater than 6 since the first 6 bits * of INT_PEND0 are taken */ +#if 0 + /* Get this to work */ + intr_disconnect_level(smp_processor_id(), swlevel); +#else swlevel = IRQ_TO_SWLEVEL(irq); br = LOCAL_HUB_L(PI_INT_MASK0_A); - br = LOCAL_HUB_L(PI_INT_MASK0_A); LOCAL_HUB_S(PI_INT_MASK0_A, br & ~(1 << swlevel)); LOCAL_HUB_L(PI_INT_MASK0_A); /* Flush */ + cpu_data[smp_processor_id()].p_intmasks.intpend0_masks[0] &= + ~(1 << swlevel); +#endif bridge->b_int_enable &= ~(1 << pin); bridge->b_widget.w_tflush; /* Flush */ @@ -610,8 +623,6 @@ void __global_restore_flags(unsigned long flags) #endif /* CONFIG_SMP */ -hub_intmasks_t per_hub_intmasks[MAX_COMPACT_NODES]; - /* * Get values that vary depending on which CPU and bit we're operating on. */ @@ -620,7 +631,7 @@ static hub_intmasks_t *intr_get_ptrs(cpuid_t cpu, int bit, int *new_bit, { hub_intmasks_t *hub_intmasks; - hub_intmasks = &per_hub_intmasks[cputocnode(cpu)]; + hub_intmasks = &cpu_data[cpu].p_intmasks; if (bit < N_INTPEND_BITS) { *intpend_masks = hub_intmasks->intpend0_masks; *ip = 0; |