[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