mem: Print an MSHR without triggering any assertions
authorNikos Nikoleris <nikos.nikoleris@arm.com>
Mon, 15 Aug 2016 11:00:36 +0000 (12:00 +0100)
committerNikos Nikoleris <nikos.nikoleris@arm.com>
Mon, 15 Aug 2016 11:00:36 +0000 (12:00 +0100)
Previously printing an mshr would trigger an assertion if the MSHR was
not in service or if the targets list was empty. This patch changes
the print function to bypasses the accessor functions for
postInvalidate and postDowngrade and avoid the relevant assertions. It
also checks if the targets list is empty before calling print on it.

Change-Id: Ic18bee6cb088f63976112eba40e89501237cfe62
Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com>
src/mem/cache/mshr.cc

index 71cfca7bdb5b513f2382fbf99c2cc4083f5e54ba..86b5a4c0884cd8de5a798aa564a64b3a87e10294 100644 (file)
@@ -518,11 +518,13 @@ MSHR::print(std::ostream &os, int verbosity, const std::string &prefix) const
              _isUncacheable ? "Unc" : "",
              inService ? "InSvc" : "",
              downstreamPending ? "DwnPend" : "",
-             hasPostInvalidate() ? "PostInv" : "",
-             hasPostDowngrade() ? "PostDowngr" : "");
+             postInvalidate ? "PostInv" : "",
+             postDowngrade ? "PostDowngr" : "");
 
-    ccprintf(os, "%s  Targets:\n", prefix);
-    targets.print(os, verbosity, prefix + "    ");
+    if (!targets.empty()) {
+        ccprintf(os, "%s  Targets:\n", prefix);
+        targets.print(os, verbosity, prefix + "    ");
+    }
     if (!deferredTargets.empty()) {
         ccprintf(os, "%s  Deferred Targets:\n", prefix);
         deferredTargets.print(os, verbosity, prefix + "      ");