cpu: MinorCPU not updating cycle counter value
authorGiacomo Travaglini <giacomo.travaglini@arm.com>
Thu, 26 Nov 2020 10:42:16 +0000 (10:42 +0000)
committerGiacomo Travaglini <giacomo.travaglini@arm.com>
Tue, 8 Dec 2020 09:49:29 +0000 (09:49 +0000)
By not updating the cycle counter value for every tick in the
MinorCPU meant that a read to the associated performance counter
was always returning 0.

For more info check the following email thread in gem5-users:

https://www.mail-archive.com/gem5-users@gem5.org/msg18742.html

Change-Id: Ibc033b536669cbb43d40c8a7c0659eb5565bdf93
Signed-off-by: Giacomo Travaglini <giacomo.travaglini@arm.com>
Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/38095
Tested-by: kokoro <noreply+kokoro@google.com>
Reviewed-by: Gabe Black <gabe.black@gmail.com>
Reviewed-by: Jason Lowe-Power <power.jg@gmail.com>
Maintainer: Jason Lowe-Power <power.jg@gmail.com>

src/cpu/minor/cpu.hh
src/cpu/minor/pipeline.cc

index 0e919f332517f6b52ac5e9a6dca36fb4cc3ef2fa..1e84656566abc6e70eafabc8e5906deba496441a 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2012-2014 ARM Limited
+ * Copyright (c) 2012-2014, 2020 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -181,6 +181,12 @@ class MinorCPU : public BaseCPU
         return prio_list;
     }
 
+    /** The tick method in the MinorCPU is simply updating the cycle
+     * counters as the ticking of the pipeline stages is already
+     * handled by the Pipeline object.
+     */
+    void tick() { updateCycleCounters(BaseCPU::CPU_STATE_ON); }
+
     /** Interface for stages to signal that they have become active after
      *  a callback or eventq event where the pipeline itself may have
      *  already been idled.  The stage argument should be from the
index 78c2020623c7503e84a3f46aa1b841fc31344f5a..3997c89c1dd4ae5afa1cfc4aec626f0a1c1205cd 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2013-2014 ARM Limited
+ * Copyright (c) 2013-2014, 2020 ARM Limited
  * All rights reserved
  *
  * The license below extends only to copyright in the software and shall
@@ -121,6 +121,9 @@ Pipeline::minorTrace() const
 void
 Pipeline::evaluate()
 {
+    /** We tick the CPU to update the BaseCPU cycle counters */
+    cpu.tick();
+
     /* Note that it's important to evaluate the stages in order to allow
      *  'immediate', 0-time-offset TimeBuffer activity to be visible from
      *  later stages to earlier ones in the same cycle */