diff --git a/src/mem/mem_ctrl.cc b/src/mem/mem_ctrl.cc index 1e60ced3f7..cc27684961 100644 --- a/src/mem/mem_ctrl.cc +++ b/src/mem/mem_ctrl.cc @@ -154,6 +154,18 @@ MemCtrl::recvAtomic(PacketPtr pkt) return latency; } +Tick +MemCtrl::recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor) +{ + Tick latency = recvAtomic(pkt); + if (dram) { + dram->getBackdoor(backdoor); + } else if (nvm) { + nvm->getBackdoor(backdoor); + } + return latency; +} + bool MemCtrl::readQueueFull(unsigned int neededEntries) const { @@ -1461,6 +1473,13 @@ MemCtrl::MemoryPort::recvAtomic(PacketPtr pkt) return ctrl.recvAtomic(pkt); } +Tick +MemCtrl::MemoryPort::recvAtomicBackdoor( + PacketPtr pkt, MemBackdoorPtr &backdoor) +{ + return ctrl.recvAtomicBackdoor(pkt, backdoor); +} + bool MemCtrl::MemoryPort::recvTimingReq(PacketPtr pkt) { diff --git a/src/mem/mem_ctrl.hh b/src/mem/mem_ctrl.hh index e6ae0abe38..dd13e3ce09 100644 --- a/src/mem/mem_ctrl.hh +++ b/src/mem/mem_ctrl.hh @@ -251,13 +251,15 @@ class MemCtrl : public QoS::MemCtrl protected: - Tick recvAtomic(PacketPtr pkt); + Tick recvAtomic(PacketPtr pkt) override; + Tick recvAtomicBackdoor( + PacketPtr pkt, MemBackdoorPtr &backdoor) override; - void recvFunctional(PacketPtr pkt); + void recvFunctional(PacketPtr pkt) override; - bool recvTimingReq(PacketPtr); + bool recvTimingReq(PacketPtr) override; - virtual AddrRangeList getAddrRanges() const; + AddrRangeList getAddrRanges() const override; }; @@ -701,6 +703,7 @@ class MemCtrl : public QoS::MemCtrl protected: Tick recvAtomic(PacketPtr pkt); + Tick recvAtomicBackdoor(PacketPtr pkt, MemBackdoorPtr &backdoor); void recvFunctional(PacketPtr pkt); bool recvTimingReq(PacketPtr pkt);