diff options
Diffstat (limited to 'src/arch/x86/interrupts.cc')
-rw-r--r-- | src/arch/x86/interrupts.cc | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/src/arch/x86/interrupts.cc b/src/arch/x86/interrupts.cc index b869a929e..0ef79a472 100644 --- a/src/arch/x86/interrupts.cc +++ b/src/arch/x86/interrupts.cc @@ -588,7 +588,7 @@ X86ISA::Interrupts::setReg(ApicRegIndex reg, uint32_t val) X86ISA::Interrupts::Interrupts(Params * p) : BasicPioDevice(p, PageBytes), IntDevice(this, p->int_latency), - apicTimerEvent(this), + apicTimerEvent([this]{ processApicTimerEvent(); }, name()), pendingSmi(false), smiVector(0), pendingNmi(false), nmiVector(0), pendingExtInt(false), extIntVector(0), @@ -767,3 +767,9 @@ X86LocalApicParams::create() { return new X86ISA::Interrupts(this); } + +void +X86ISA::Interrupts::processApicTimerEvent() { + if (triggerTimerInterrupt()) + setReg(APIC_INITIAL_COUNT, readReg(APIC_INITIAL_COUNT)); +} |