summaryrefslogtreecommitdiff
path: root/src/mem/tport.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/tport.cc')
-rw-r--r--src/mem/tport.cc13
1 files changed, 12 insertions, 1 deletions
diff --git a/src/mem/tport.cc b/src/mem/tport.cc
index 0a2127490..6c8c12ce2 100644
--- a/src/mem/tport.cc
+++ b/src/mem/tport.cc
@@ -69,11 +69,21 @@ SimpleTimingPort::recvTiming(PacketPtr pkt)
// if we ever added it back.
assert(pkt->isRequest());
assert(pkt->result == Packet::Unknown);
+
+ if (pkt->memInhibitAsserted()) {
+ // snooper will supply based on copy of packet
+ // still target's responsibility to delete packet
+ delete pkt->req;
+ delete pkt;
+ return true;
+ }
+
bool needsResponse = pkt->needsResponse();
Tick latency = recvAtomic(pkt);
// turn packet around to go back to requester if response expected
if (needsResponse) {
- // recvAtomic() should already have turned packet into atomic response
+ // recvAtomic() should already have turned packet into
+ // atomic response
assert(pkt->isResponse());
pkt->convertAtomicToTimingResponse();
schedSendTiming(pkt, curTick + latency);
@@ -81,6 +91,7 @@ SimpleTimingPort::recvTiming(PacketPtr pkt)
delete pkt->req;
delete pkt;
}
+
return true;
}