diff options
Diffstat (limited to 'linux/dev/arch/i386/kernel/irq.c')
-rw-r--r-- | linux/dev/arch/i386/kernel/irq.c | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/linux/dev/arch/i386/kernel/irq.c b/linux/dev/arch/i386/kernel/irq.c index 656c1470..3b349ccc 100644 --- a/linux/dev/arch/i386/kernel/irq.c +++ b/linux/dev/arch/i386/kernel/irq.c @@ -27,6 +27,7 @@ #include <mach/mach_types.h> #include <mach/vm_param.h> #include <kern/assert.h> +#include <kern/cpu_number.h> #include <i386/spl.h> #include <i386/irq.h> @@ -343,7 +344,7 @@ probe_irq_on (void) unsigned i, irqs = 0; unsigned long delay; - assert (curr_ipl == 0); + assert (curr_ipl[cpu_number()] == 0); /* * Allocate all available IRQs. @@ -363,7 +364,7 @@ probe_irq_on (void) for (delay = jiffies + HZ / 10; delay > jiffies;) ; - return (irqs & ~curr_pic_mask); + return (irqs & ~linux_pic_mask); } /* @@ -374,9 +375,9 @@ probe_irq_off (unsigned long irqs) { unsigned int i; - assert (curr_ipl == 0); + assert (curr_ipl[cpu_number()] == 0); - irqs &= curr_pic_mask; + irqs &= linux_pic_mask; /* * Disable unnecessary IRQs. @@ -721,13 +722,13 @@ init_IRQ (void) outb_p (PIT_C0 | PIT_SQUAREMODE | PIT_READMODE, PITCTL_PORT); outb_p (latch & 0xff, PITCTR0_PORT); outb (latch >> 8, PITCTR0_PORT); -#endif /* * Install our clock interrupt handler. */ old_clock_handler = ivect[0]; ivect[0] = linux_timer_intr; +#endif reserve_mach_irqs (); @@ -764,9 +765,11 @@ restore_IRQ (void) */ (void) splhigh (); +#ifndef APIC /* * Restore clock interrupt handler. */ ivect[0] = old_clock_handler; +#endif } |