summaryrefslogtreecommitdiff
path: root/src/arch/x86
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch/x86')
-rw-r--r--src/arch/x86/interrupts.cc9
1 files changed, 4 insertions, 5 deletions
diff --git a/src/arch/x86/interrupts.cc b/src/arch/x86/interrupts.cc
index 148b26157..df1b40e5b 100644
--- a/src/arch/x86/interrupts.cc
+++ b/src/arch/x86/interrupts.cc
@@ -330,9 +330,6 @@ X86ISA::Interrupts::readReg(ApicRegIndex reg)
case APIC_PROCESSOR_PRIORITY:
panic("Local APIC Processor Priority register unimplemented.\n");
break;
- case APIC_EOI:
- panic("Local APIC EOI register unimplemented.\n");
- break;
case APIC_ERROR_STATUS:
regs[APIC_INTERNAL_STATE] &= ~ULL(0x1);
break;
@@ -391,8 +388,10 @@ X86ISA::Interrupts::setReg(ApicRegIndex reg, uint32_t val)
panic("Local APIC Processor Priority register unimplemented.\n");
break;
case APIC_EOI:
- panic("Local APIC EOI register unimplemented.\n");
- break;
+ // Remove the interrupt that just completed from the local apic state.
+ clearRegArrayBit(APIC_IN_SERVICE_BASE, ISRV);
+ updateISRV();
+ return;
case APIC_LOGICAL_DESTINATION:
newVal = val & 0xFF000000;
break;