From 030b9a942871e73e36930154e4d484657ac8e5fa Mon Sep 17 00:00:00 2001 From: "H. Peter Anvin" Date: Fri, 30 Mar 2012 17:27:04 -0700 Subject: [PATCH] pxe: Fix interrupt unmasking Fix the interrupt unmasking operation; order of arguments was reversed and the masking constant was incorrect. Signed-off-by: H. Peter Anvin --- core/fs/pxe/isr.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/core/fs/pxe/isr.c b/core/fs/pxe/isr.c index 0c0b8991..709d48e6 100644 --- a/core/fs/pxe/isr.c +++ b/core/fs/pxe/isr.c @@ -20,7 +20,7 @@ static bool install_irq_vector(uint8_t irq, void (*isr)(void), far_ptr_t *old) { far_ptr_t *entry; unsigned int vec; - uint8_t mask; + uint8_t mask, mymask; irq_state_t irqstate; if (irq < 8) @@ -37,17 +37,18 @@ static bool install_irq_vector(uint8_t irq, void (*isr)(void), far_ptr_t *old) entry->ptr = (uint32_t)isr; /* Enable this interrupt at the PIC level, just in case... */ + mymask = ~(1 << (irq & 7)); if (irq >= 8) { mask = inb(0x21); mask &= ~(1 << 2); /* Enable cascade */ outb(mask, 0x21); mask = inb(0xa1); - mask &= ~(1 << (irq & 3)); - outb(0xa1, mask); + mask &= mymask; + outb(mask, 0xa1); } else { mask = inb(0x21); - mask &= ~(1 << (irq & 3)); - outb(0x21, mask); + mask &= mymask; + outb(mask, 0x21); } irq_restore(irqstate); -- 2.11.4.GIT