summaryrefslogtreecommitdiff
path: root/src/mem/cache/miss/mshr.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/mem/cache/miss/mshr.cc')
-rw-r--r--src/mem/cache/miss/mshr.cc18
1 files changed, 9 insertions, 9 deletions
diff --git a/src/mem/cache/miss/mshr.cc b/src/mem/cache/miss/mshr.cc
index 5d5e63f90..7ba3789fe 100644
--- a/src/mem/cache/miss/mshr.cc
+++ b/src/mem/cache/miss/mshr.cc
@@ -119,25 +119,23 @@ MSHR::allocateTarget(PacketPtr target, Tick whenReady, Counter _order)
++ntargets;
}
-void
-MSHR::allocateSnoopTarget(PacketPtr pkt, Tick whenReady, Counter _order)
+bool
+MSHR::handleSnoop(PacketPtr pkt, Counter _order)
{
- assert(inService); // don't bother to call otherwise
+ if (!inService || (pkt->isExpressSnoop() && !pkt->isDeferredSnoop())) {
+ return false;
+ }
if (pendingInvalidate) {
// a prior snoop has already appended an invalidation, so
// logically we don't have the block anymore...
- return;
+ return true;
}
- DPRINTF(Cache, "deferred snoop on %x: %s %s\n", addr,
- needsExclusive ? "needsExclusive" : "",
- pkt->needsExclusive() ? "pkt->needsExclusive()" : "");
-
if (needsExclusive || pkt->needsExclusive()) {
// actual target device (typ. PhysicalMemory) will delete the
// packet on reception, so we need to save a copy here
- targets.push_back(Target(new Packet(pkt), whenReady, _order, false));
+ targets.push_back(Target(new Packet(pkt), curTick, _order, false));
++ntargets;
if (needsExclusive) {
@@ -157,6 +155,8 @@ MSHR::allocateSnoopTarget(PacketPtr pkt, Tick whenReady, Counter _order)
pendingShared = true;
pkt->assertShared();
}
+
+ return true;
}