mem: Replace check with panic where inhibited should not happen
authorAndreas Hansson <andreas.hansson@arm.com>
Mon, 22 Apr 2013 17:20:33 +0000 (13:20 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Mon, 22 Apr 2013 17:20:33 +0000 (13:20 -0400)
This patch changes the SimpleTimingPort and RubyPort to panic on
inhibited requests as this should never happen in either of the
cases. The SimpleTimingPort is only used for the I/O devices PIO port
and the DMA devices config port and should thus never see an inhibited
request. Similarly, the SimpleTimingPort is also used for the
MessagePort in x86, and there should also not be any cases where the
port sees an inhibited request.

src/mem/ruby/system/RubyPort.cc
src/mem/tport.cc

index 1ebc1b0f64a9c7ff196f15bf71a75474f468e010..72dc1447aa275979419b38dd1c164a63b14cccb2 100644 (file)
@@ -168,18 +168,8 @@ RubyPort::M5Port::recvTimingReq(PacketPtr pkt)
 
     //dsm: based on SimpleTimingPort::recvTimingReq(pkt);
 
-    // The received packets should only be M5 requests, which should never
-    // get nacked.  There used to be code to hanldle nacks here, but
-    // I'm pretty sure it didn't work correctly with the drain code,
-    // so that would need to be fixed if we ever added it back.
-
-    if (pkt->memInhibitAsserted()) {
-        warn("memInhibitAsserted???");
-        // snooper will supply based on copy of packet
-        // still target's responsibility to delete packet
-        delete pkt;
-        return true;
-    }
+    if (pkt->memInhibitAsserted())
+        panic("RubyPort should never see an inhibited request\n");
 
     // Save the port in the sender state object to be used later to
     // route the response
index 7a0dd7cd9dd6a1be2fa8128f64ca01a3ed62e780..4408b59baf323e7d2a7940d1f1aeb2aa732dd4ba 100644 (file)
@@ -68,12 +68,10 @@ SimpleTimingPort::recvTimingReq(PacketPtr pkt)
         delete pendingDelete[x];
     pendingDelete.clear();
 
-    if (pkt->memInhibitAsserted()) {
-        // snooper will supply based on copy of packet
-        // still target's responsibility to delete packet
-        delete pkt;
-        return true;
-    }
+    // the SimpleTimingPort should not be used anywhere where there is
+    // a need to deal with inhibited packets
+    if (pkt->memInhibitAsserted())
+        panic("SimpleTimingPort should never see an inhibited request\n");
 
     bool needsResponse = pkt->needsResponse();
     Tick latency = recvAtomic(pkt);