sim: Add additional debug information when draining
authorSascha Bischoff <sascha.bischoff@arm.com>
Fri, 11 Dec 2015 17:29:53 +0000 (17:29 +0000)
committerSascha Bischoff <sascha.bischoff@arm.com>
Fri, 11 Dec 2015 17:29:53 +0000 (17:29 +0000)
This patch adds some additional information when draining the system which
allows the user to debug which SimObject(s) in the system is failing to drain.
Only enabled for the builds with tracing enabled and is subject to the Drain
debug flag being set at runtime.

src/sim/drain.cc

index c6073487607a745607ac83b8cb3693b4a61e44a3..085f781dc27f25ac3a12771c0a4b22661650271b 100644 (file)
@@ -43,6 +43,7 @@
 #include "base/trace.hh"
 #include "debug/Drain.hh"
 #include "sim/sim_exit.hh"
+#include "sim/sim_object.hh"
 
 DrainManager DrainManager::_instance;
 
@@ -67,8 +68,15 @@ DrainManager::tryDrain()
 
     DPRINTF(Drain, "Trying to drain %u objects.\n", drainableCount());
     _state = DrainState::Draining;
-    for (auto *obj : _allDrainable)
-        _count += obj->dmDrain() == DrainState::Drained ? 0 : 1;
+    for (auto *obj : _allDrainable) {
+        DrainState status = obj->dmDrain();
+        if (DTRACE(Drain) && status != DrainState::Drained) {
+            SimObject *temp = dynamic_cast<SimObject*>(obj);
+            if (temp)
+                DPRINTF(Drain, "Failed to drain %s\n", temp->name());
+        }
+        _count += status == DrainState::Drained ? 0 : 1;
+    }
 
     if (_count == 0) {
         DPRINTF(Drain, "Drain done.\n");