x86: APIC: Fix the getRegArrayBit function.
authorGabe Black <gabeblack@google.com>
Mon, 17 Nov 2014 08:17:06 +0000 (00:17 -0800)
committerGabe Black <gabeblack@google.com>
Mon, 17 Nov 2014 08:17:06 +0000 (00:17 -0800)
The getRegArrayBit function extracts a bit from a series of registers which
are treated as a single large bit array. A previous change had modified the
logic which figured out which bit to extract from ">> 5" to "% 5" which seems
wrong, especially when other, similar functions were changed to use "% 32".

src/arch/x86/interrupts.hh

index dabee544166801b9f9a2f7701edd7da2bb9addb7..b584c234b74ff694dbf138c542f51004b1561cc6 100644 (file)
@@ -180,7 +180,7 @@ class Interrupts : public BasicPioDevice, IntDevice
     bool
     getRegArrayBit(ApicRegIndex base, uint8_t vector)
     {
-        return bits(regs[base + (vector / 32)], vector % 5);
+        return bits(regs[base + (vector / 32)], vector % 32);
     }
 
     void requestInterrupt(uint8_t vector, uint8_t deliveryMode, bool level);