mem: Check for waiting state in bus draining
authorAndreas Hansson <andreas.hansson@arm.com>
Thu, 30 May 2013 16:53:57 +0000 (12:53 -0400)
committerAndreas Hansson <andreas.hansson@arm.com>
Thu, 30 May 2013 16:53:57 +0000 (12:53 -0400)
This patch fixes a bug in the bus where the bus transitions from busy
to idle and still has a port that is waiting for a retry from a peer.

src/mem/bus.cc

index 8546df565365a098f31d3aca54aa8d32d73ae77b..41406e87a7b5bbed291783246b7d7e1d6add6779 100644 (file)
@@ -259,7 +259,7 @@ BaseBus::Layer<PortClass>::releaseLayer()
     // bus layer is now idle, so if someone is waiting we can retry
     if (!waitingForLayer.empty()) {
         retryWaiting();
-    } else if (drainManager) {
+    } else if (waitingForPeer == NULL && drainManager) {
         DPRINTF(Drain, "Bus done draining, signaling drain manager\n");
         //If we weren't able to drain before, do it now.
         drainManager->signalDrainDone();