summaryrefslogtreecommitdiff
path: root/src/arch/x86/interrupts.cc
diff options
context:
space:
mode:
authorGabe Black <gblack@eecs.umich.edu>2008-10-12 23:28:11 -0700
committerGabe Black <gblack@eecs.umich.edu>2008-10-12 23:28:11 -0700
commitbdc28d793dd9b3407c513fba5c24917aa423f7ca (patch)
tree6615a36ede23f7cda567368204a918017d470669 /src/arch/x86/interrupts.cc
parentfd376882940db45bdf7abf2fff8758b162828b83 (diff)
downloadgem5-bdc28d793dd9b3407c513fba5c24917aa423f7ca.tar.xz
X86: Implement the EOI register in the local APIC.
Diffstat (limited to 'src/arch/x86/interrupts.cc')
-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;