mem: Explicitly check MSHR snoops for cases not dealt with
authorAndreas Hansson <andreas.hansson@arm.com>
Mon, 28 Dec 2015 16:14:18 +0000 (11:14 -0500)
committerAndreas Hansson <andreas.hansson@arm.com>
Mon, 28 Dec 2015 16:14:18 +0000 (11:14 -0500)
Add a sanity check to make it explicit that we currently do not allow
an I/O coherent agent to directly issue writes into the coherent part
of the memory system (it has to go via a cache, and get transformed
into a read ex, upgrade or invalidation).

src/mem/cache/mshr.cc

index 7f7b627dac0008a25e0ea6a5879b890b2a36a745..e6a62949a84ed98efc320200f7cfba94a856361b 100644 (file)
@@ -323,6 +323,15 @@ MSHR::handleSnoop(PacketPtr pkt, Counter _order)
 {
     DPRINTF(Cache, "%s for %s addr %#llx size %d\n", __func__,
             pkt->cmdString(), pkt->getAddr(), pkt->getSize());
+
+    // when we snoop packets the needsExclusive and isInvalidate flags
+    // should always be the same, however, this assumes that we never
+    // snoop writes as they are currently not marked as invalidations
+    panic_if(pkt->needsExclusive() != pkt->isInvalidate(),
+             "%s got snoop %s to addr %#llx where needsExclusive, "
+             "does not match isInvalidate", name(), pkt->cmdString(),
+             pkt->getAddr());
+
     if (!inService || (pkt->isExpressSnoop() && downstreamPending)) {
         // Request has not been issued yet, or it's been issued
         // locally but is buffered unissued at some downstream cache