[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH v3 15/15] target/ppc/power8_pmu.c: handle overflow bits when PMU
From: |
Daniel Henrique Barboza |
Subject: |
[PATCH v3 15/15] target/ppc/power8_pmu.c: handle overflow bits when PMU is running |
Date: |
Fri, 3 Sep 2021 17:31:16 -0300 |
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 | 24 ++++++++++++++++++++++++
1 file changed, 24 insertions(+)
diff --git a/target/ppc/power8_pmu.c b/target/ppc/power8_pmu.c
index 9707f6e3cf..c9b096f0de 100644
--- a/target/ppc/power8_pmu.c
+++ b/target/ppc/power8_pmu.c
@@ -345,6 +345,30 @@ void helper_store_mmcr0(CPUPPCState *env, target_ulong
value)
} else {
start_cycle_count_session(env);
}
+ } else {
+ /*
+ * No change in MMCR0_FC state, but if the PMU is running and
+ * a change in the counter negative overflow bits is made,
+ * we need to restart a new cycle count session to restart
+ * the appropriate overflow timers.
+ */
+ if (curr_FC) {
+ return;
+ }
+
+ bool pmc1ce_curr = curr_value & MMCR0_PMC1CE;
+ bool pmc1ce_new = value & MMCR0_PMC1CE;
+ bool pmcjce_curr = curr_value & MMCR0_PMCjCE;
+ bool pmcjce_new = value & MMCR0_PMCjCE;
+
+ if (pmc1ce_curr == pmc1ce_new && pmcjce_curr == pmcjce_new) {
+ return;
+ }
+
+ /* Update the counter with the events counted so far */
+ update_cycles_PMCs(env);
+
+ start_cycle_count_session(env);
}
}
--
2.31.1
- [PATCH v3 09/15] target/ppc: PMU Event-Based exception support, (continued)
- [PATCH v3 09/15] target/ppc: PMU Event-Based exception support, Daniel Henrique Barboza, 2021/09/03
- [PATCH v3 08/15] PPC64/TCG: Implement 'rfebb' instruction, Daniel Henrique Barboza, 2021/09/03
- [PATCH v3 10/15] target/ppc/excp_helper.c: EBB handling adjustments, Daniel Henrique Barboza, 2021/09/03
- [PATCH v3 06/15] target/ppc/power8_pmu.c: add PM_RUN_INST_CMPL (0xFA) event, Daniel Henrique Barboza, 2021/09/03
- [PATCH v3 11/15] target/ppc/power8_pmu.c: enable PMC1 counter negative overflow, Daniel Henrique Barboza, 2021/09/03
- [PATCH v3 12/15] target/ppc/power8_pmu.c: cycles overflow with all PMCs, Daniel Henrique Barboza, 2021/09/03
- [PATCH v3 13/15] target/ppc: PMU: insns counter negative overflow support, Daniel Henrique Barboza, 2021/09/03
- [PATCH v3 14/15] target/ppc/translate: PMU: handle setting of PMCs while running, Daniel Henrique Barboza, 2021/09/03
- [PATCH v3 15/15] target/ppc/power8_pmu.c: handle overflow bits when PMU is running,
Daniel Henrique Barboza <=