[syslinux:lwip] pxe: Fix interrupt unmasking
syslinux-bot for H. Peter Anvin
hpa at zytor.com
Fri Mar 30 17:33:02 PDT 2012
Commit-ID: 030b9a942871e73e36930154e4d484657ac8e5fa
Gitweb: http://www.syslinux.org/commit/030b9a942871e73e36930154e4d484657ac8e5fa
Author: H. Peter Anvin <hpa at zytor.com>
AuthorDate: Fri, 30 Mar 2012 17:27:04 -0700
Committer: H. Peter Anvin <hpa at zytor.com>
CommitDate: Fri, 30 Mar 2012 17:29:35 -0700
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 <hpa at zytor.com>
---
core/fs/pxe/isr.c | 11 ++++++-----
1 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/core/fs/pxe/isr.c b/core/fs/pxe/isr.c
index 0c0b899..709d48e 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);
More information about the Syslinux-commits
mailing list