diff options
Diffstat (limited to 'src/arch')
-rw-r--r-- | src/arch/x86/interrupts.cc | 11 | ||||
-rw-r--r-- | src/arch/x86/interrupts.hh | 2 |
2 files changed, 6 insertions, 7 deletions
diff --git a/src/arch/x86/interrupts.cc b/src/arch/x86/interrupts.cc index 1b21835c5..14bdc0fc7 100644 --- a/src/arch/x86/interrupts.cc +++ b/src/arch/x86/interrupts.cc @@ -331,11 +331,9 @@ X86ISA::Interrupts::recvMessage(PacketPtr pkt) } -bool -X86ISA::Interrupts::recvResponse(PacketPtr pkt) +void +X86ISA::Interrupts::completeIPI(PacketPtr pkt) { - assert(!pkt->isError()); - assert(pkt->cmd == MemCmd::WriteResp); if (--pendingIPIs == 0) { InterruptCommandRegLow low = regs[APIC_INTERRUPT_COMMAND_LOW]; // Record that the ICR is now idle. @@ -343,7 +341,7 @@ X86ISA::Interrupts::recvResponse(PacketPtr pkt) regs[APIC_INTERRUPT_COMMAND_LOW] = low; } DPRINTF(LocalApic, "ICR is now idle.\n"); - return true; + delete pkt; } @@ -548,7 +546,8 @@ X86ISA::Interrupts::setReg(ApicRegIndex reg, uint32_t val) regs[APIC_INTERRUPT_COMMAND_LOW] = low; for (auto id: apics) { PacketPtr pkt = buildIntTriggerPacket(id, message); - intMasterPort.sendMessage(pkt, sys->isTimingMode()); + intMasterPort.sendMessage(pkt, sys->isTimingMode(), + [this](PacketPtr pkt) { completeIPI(pkt); }); } newVal = regs[APIC_INTERRUPT_COMMAND_LOW]; } diff --git a/src/arch/x86/interrupts.hh b/src/arch/x86/interrupts.hh index a6364c8b1..3d6ef1f82 100644 --- a/src/arch/x86/interrupts.hh +++ b/src/arch/x86/interrupts.hh @@ -206,7 +206,7 @@ class Interrupts : public PioDevice Tick read(PacketPtr pkt) override; Tick write(PacketPtr pkt) override; Tick recvMessage(PacketPtr pkt); - bool recvResponse(PacketPtr pkt); + void completeIPI(PacketPtr pkt); bool triggerTimerInterrupt() |