From 38a369c473a8c4b53116806fb50797ab73e7442e Mon Sep 17 00:00:00 2001 From: Sascha Bischoff Date: Fri, 11 Dec 2015 17:29:53 +0000 Subject: [PATCH] sim: Add additional debug information when draining 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 | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/src/sim/drain.cc b/src/sim/drain.cc index c60734876..085f781dc 100644 --- a/src/sim/drain.cc +++ b/src/sim/drain.cc @@ -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(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");