X86: Fix the functions that manipulate large bit arrays in the local APIC.
authorGabe Black <gblack@eecs.umich.edu>
Sun, 19 Apr 2009 20:47:15 +0000 (13:47 -0700)
committerGabe Black <gblack@eecs.umich.edu>
Sun, 19 Apr 2009 20:47:15 +0000 (13:47 -0700)
src/arch/x86/interrupts.hh

index 1f3a414ce4c104288733c011a4c416bdbd2bb0de..72a852adaa434d7ebf8adb41b6239783b9624a75 100644 (file)
@@ -172,19 +172,19 @@ class Interrupts : public BasicPioDevice, IntDev
     void
     setRegArrayBit(ApicRegIndex base, uint8_t vector)
     {
-        regs[base + (vector % 32)] |= (1 << (vector >> 5));
+        regs[base + (vector / 32)] |= (1 << (vector % 32));
     }
 
     void
     clearRegArrayBit(ApicRegIndex base, uint8_t vector)
     {
-        regs[base + (vector % 32)] &= ~(1 << (vector >> 5));
+        regs[base + (vector / 32)] &= ~(1 << (vector % 32));
     }
 
     bool
     getRegArrayBit(ApicRegIndex base, uint8_t vector)
     {
-        return bits(regs[base + (vector % 32)], vector >> 5);
+        return bits(regs[base + (vector / 32)], vector % 5);
     }
 
     void requestInterrupt(uint8_t vector, uint8_t deliveryMode, bool level);