diff options
Diffstat (limited to 'linux/dev/arch/i386')
-rw-r--r-- | linux/dev/arch/i386/kernel/irq.c | 26 |
1 files changed, 10 insertions, 16 deletions
diff --git a/linux/dev/arch/i386/kernel/irq.c b/linux/dev/arch/i386/kernel/irq.c index a02e9582..596dae6b 100644 --- a/linux/dev/arch/i386/kernel/irq.c +++ b/linux/dev/arch/i386/kernel/irq.c @@ -128,18 +128,15 @@ linux_intr (int irq) static inline void mask_irq (unsigned int irq_nr) { - int i; - - for (i = 0; i < intpri[irq_nr]; i++) - pic_mask[i] |= 1 << irq_nr; + int new_pic_mask = curr_pic_mask | 1 << irq_nr; - if (curr_pic_mask != pic_mask[curr_ipl]) + if (curr_pic_mask != new_pic_mask) { - curr_pic_mask = pic_mask[curr_ipl]; + curr_pic_mask = new_pic_mask; if (irq_nr < 8) - outb (curr_pic_mask & 0xff, PIC_MASTER_OCW); + outb (curr_pic_mask & 0xff, PIC_MASTER_OCW); else - outb (curr_pic_mask >> 8, PIC_SLAVE_OCW); + outb (curr_pic_mask >> 8, PIC_SLAVE_OCW); } } @@ -149,18 +146,18 @@ mask_irq (unsigned int irq_nr) static inline void unmask_irq (unsigned int irq_nr) { - int mask, i; + int mask; + int new_pic_mask; mask = 1 << irq_nr; if (irq_nr >= 8) mask |= 1 << 2; - for (i = 0; i < intpri[irq_nr]; i++) - pic_mask[i] &= ~mask; + new_pic_mask = curr_pic_mask & ~mask; - if (curr_pic_mask != pic_mask[curr_ipl]) + if (curr_pic_mask != new_pic_mask) { - curr_pic_mask = pic_mask[curr_ipl]; + curr_pic_mask = new_pic_mask; if (irq_nr < 8) outb (curr_pic_mask & 0xff, PIC_MASTER_OCW); else @@ -737,8 +734,6 @@ init_IRQ (void) } } - form_pic_mask (); - /* * Enable interrupts. */ @@ -777,6 +772,5 @@ restore_IRQ (void) */ ivect[0] = old_clock_handler; intpri[0] = old_clock_pri; - form_pic_mask (); } |