mem-cache: print prefetch queues in Queued prefetcher

Added to track the content of the prefetch queues in the debug output

Change-Id: I49d0f4f643ec0dbd7af3087b6267d454cfccddba
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/47199
Maintainer: Jason Lowe-Power <power.jg@gmail.com>
Reviewed-by: Daniel Carvalho <odanrc@yahoo.com.br>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Tested-by: kokoro <noreply+kokoro@google.com>
diff --git a/src/mem/cache/SConscript b/src/mem/cache/SConscript
index 0150692..7910b93 100644
--- a/src/mem/cache/SConscript
+++ b/src/mem/cache/SConscript
@@ -47,6 +47,7 @@
 DebugFlag('CacheVerbose')
 DebugFlag('HWPrefetch')
 DebugFlag('MSHR')
+DebugFlag('HWPrefetchQueue')
 
 # CacheTags is so outrageously verbose, printing the cache's entire tag
 # array on each timing access, that you should probably have to ask for
diff --git a/src/mem/cache/prefetch/queued.cc b/src/mem/cache/prefetch/queued.cc
index 9aa4f89..a2e1952 100644
--- a/src/mem/cache/prefetch/queued.cc
+++ b/src/mem/cache/prefetch/queued.cc
@@ -43,6 +43,7 @@
 #include "base/logging.hh"
 #include "base/trace.hh"
 #include "debug/HWPrefetch.hh"
+#include "debug/HWPrefetchQueue.hh"
 #include "mem/cache/base.hh"
 #include "mem/request.hh"
 #include "params/QueuedPrefetcher.hh"
@@ -116,6 +117,25 @@
     }
 }
 
+void
+Queued::printQueue(const std::list<DeferredPacket> &queue) const
+{
+    int pos = 0;
+    std::string queue_name = "";
+    if (&queue == &pfq) {
+        queue_name = "PFQ";
+    } else {
+        assert(&queue == &pfqMissingTranslation);
+        queue_name = "PFTransQ";
+    }
+
+    for (const_iterator it = queue.cbegin(); it != queue.cend();
+                                                            it++, pos++) {
+        DPRINTF(HWPrefetchQueue, "%s[%d]: Prefetch Req Addr: %#x prio: %3d\n",
+                queue_name, pos, it->pkt->getAddr(), it->priority);
+    }
+}
+
 size_t
 Queued::getMaxPermittedPrefetches(size_t total) const
 {
@@ -488,6 +508,9 @@
             it++;
         queue.insert(it, dpp);
     }
+
+    if (Debug::HWPrefetchQueue)
+        printQueue(queue);
 }
 
 } // namespace prefetch
diff --git a/src/mem/cache/prefetch/queued.hh b/src/mem/cache/prefetch/queued.hh
index 31feb30..d710bc0 100644
--- a/src/mem/cache/prefetch/queued.hh
+++ b/src/mem/cache/prefetch/queued.hh
@@ -204,6 +204,8 @@
         return pfq.empty() ? MaxTick : pfq.front().tick;
     }
 
+    void printQueue(const std::list<DeferredPacket> &queue) const;
+
   private:
 
     /**