qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Daniel Henrique Barboza <danielhb413@gmail.com>
To: qemu-devel@nongnu.org
Cc: Daniel Henrique Barboza <danielhb413@gmail.com>,
	richard.henderson@linaro.org, groug@kaod.org,
	qemu-ppc@nongnu.org, clg@kaod.org, matheus.ferst@eldorado.org.br,
	david@gibson.dropbear.id.au
Subject: [PATCH v6 07/10] target/ppc/power8-pmu.c: handle overflow bits when PMU is running
Date: Mon,  8 Nov 2021 19:50:44 -0300	[thread overview]
Message-ID: <20211108225047.1733607-8-danielhb413@gmail.com> (raw)
In-Reply-To: <20211108225047.1733607-1-danielhb413@gmail.com>

Up until this moment we were assuming that the counter negative
enabled bits, PMC1CE and PMCjCE, would never be changed when the
PMU is already started.

Turns out that there is no such restriction in the PowerISA v3.1,
and software can enable/disable overflow conditions of the counters
at any time.

To support this scenario, track the overflow bits state when a
write in MMCR0 is made in which the run state of the PMU (MMCR0_FC
bit) didn't change and, if some overflow bit were changed in the
middle of a cycle count session, restart it.

Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
 target/ppc/power8-pmu.c | 26 +++++++++++++++++++++-----
 1 file changed, 21 insertions(+), 5 deletions(-)

diff --git a/target/ppc/power8-pmu.c b/target/ppc/power8-pmu.c
index ed7fd0c898..1dfe4bc930 100644
--- a/target/ppc/power8-pmu.c
+++ b/target/ppc/power8-pmu.c
@@ -285,15 +285,31 @@ void helper_store_mmcr0(CPUPPCState *env, target_ulong value)
             start_cycle_count_session(env);
         }
     } else {
-        /*
-         * No change in MMCR0_FC state but, if the PMU is running and
-         * a change in one of the frozen counter bits is made, update
-         * the PMCs with the cycles counted so far.
-         */
         if (!curr_FC) {
+            bool cycles_updated = false;
+
+            /*
+             * No change in MMCR0_FC state but, if the PMU is running and
+             * a change in one of the frozen counter bits is made, update
+             * the PMCs with the cycles counted so far.
+             */
             if ((curr_value & MMCR0_FC14) != (value & MMCR0_FC14) ||
                 (curr_value & MMCR0_FC56) != (value & MMCR0_FC56)) {
                 pmu_update_cycles(env, curr_value);
+                cycles_updated = true;
+            }
+
+            /*
+             * If changes in the overflow bits were made, start a new
+             * cycle count session to restart the appropriate overflow
+             * timers.
+             */
+            if ((curr_value & MMCR0_PMC1CE) != (value & MMCR0_PMC1CE) ||
+                (curr_value & MMCR0_PMCjCE) != (value & MMCR0_PMCjCE)) {
+                if (!cycles_updated) {
+                    pmu_update_cycles(env, curr_value);
+                }
+                start_cycle_count_session(env);
             }
         }
     }
-- 
2.31.1



  parent reply	other threads:[~2021-11-08 22:57 UTC|newest]

Thread overview: 14+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-08 22:50 [PATCH v6 00/10] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
2021-11-08 22:50 ` [PATCH v6 01/10] target/ppc: introduce PMUEventType and PMU overflow timers Daniel Henrique Barboza
2021-11-12  3:02   ` David Gibson
2021-11-13 19:02     ` Daniel Henrique Barboza
2021-11-18  5:47       ` David Gibson
2021-11-08 22:50 ` [PATCH v6 02/10] target/ppc: PMU basic cycle count for pseries TCG Daniel Henrique Barboza
2021-11-08 22:50 ` [PATCH v6 03/10] target/ppc: enable PMU counter overflow with cycle events Daniel Henrique Barboza
2021-11-08 22:50 ` [PATCH v6 04/10] target/ppc: enable PMU instruction count Daniel Henrique Barboza
2021-11-08 22:50 ` [PATCH v6 05/10] target/ppc/power8-pmu.c: add PM_RUN_INST_CMPL (0xFA) event Daniel Henrique Barboza
2021-11-08 22:50 ` [PATCH v6 06/10] target/ppc: PMU: handle setting of PMCs while running Daniel Henrique Barboza
2021-11-08 22:50 ` Daniel Henrique Barboza [this message]
2021-11-08 22:50 ` [PATCH v6 08/10] PPC64/TCG: Implement 'rfebb' instruction Daniel Henrique Barboza
2021-11-08 22:50 ` [PATCH v6 09/10] target/ppc: PMU Event-Based exception support Daniel Henrique Barboza
2021-11-08 22:50 ` [PATCH v6 10/10] target/ppc/excp_helper.c: EBB handling adjustments Daniel Henrique Barboza

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20211108225047.1733607-8-danielhb413@gmail.com \
    --to=danielhb413@gmail.com \
    --cc=clg@kaod.org \
    --cc=david@gibson.dropbear.id.au \
    --cc=groug@kaod.org \
    --cc=matheus.ferst@eldorado.org.br \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=richard.henderson@linaro.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).