* [PATCH v12 0/5] PMU-EBB support for PPC64 TCG
@ 2022-02-16 10:10 Daniel Henrique Barboza
2022-02-16 10:10 ` [PATCH v12 1/5] target/ppc: fix indent of powerpc_set_excp_state() Daniel Henrique Barboza
` (4 more replies)
0 siblings, 5 replies; 8+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-16 10:10 UTC (permalink / raw)
To: qemu-devel; +Cc: Daniel Henrique Barboza, qemu-ppc, clg, david
Hi,
This new version adds a new patch (patch 2) that fixes --disable-tcg
--disable-linux-user compilation.
The series was based on upstream master.
Changes from v12:
- patch 2 (new):
* make power8-pmu.c compile only with CONFIG_TCG available
- patch 4 (former 3):
* added Cedric's r-b
- v11 link: https://lists.gnu.org/archive/html/qemu-devel/2022-02/msg02693.html
Daniel Henrique Barboza (5):
target/ppc: fix indent of powerpc_set_excp_state()
target/ppc: make power8-pmu.c CONFIG_TCG only
target/ppc: finalize pre-EBB PMU logic
target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions
target/ppc: trigger PERFM EBBs from power8-pmu.c
target/ppc/cpu.h | 5 ++-
target/ppc/cpu_init.c | 9 +++--
target/ppc/excp_helper.c | 83 +++++++++++++++++++++++++++++++++++++++-
target/ppc/helper.h | 1 +
target/ppc/machine.c | 2 +
target/ppc/meson.build | 2 +-
target/ppc/power8-pmu.c | 39 +++++++++++++++++--
target/ppc/power8-pmu.h | 4 +-
8 files changed, 133 insertions(+), 12 deletions(-)
--
2.34.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH v12 1/5] target/ppc: fix indent of powerpc_set_excp_state()
2022-02-16 10:10 [PATCH v12 0/5] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
@ 2022-02-16 10:10 ` Daniel Henrique Barboza
2022-02-16 10:10 ` [PATCH v12 2/5] target/ppc: make power8-pmu.c CONFIG_TCG only Daniel Henrique Barboza
` (3 subsequent siblings)
4 siblings, 0 replies; 8+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-16 10:10 UTC (permalink / raw)
To: qemu-devel; +Cc: Daniel Henrique Barboza, qemu-ppc, clg, david
Reviewed-by: David Gibson <david@gibson.dropbear.id.au>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
target/ppc/excp_helper.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index fcc83a7701..bbc75afbc0 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -361,7 +361,7 @@ static void ppc_excp_apply_ail(PowerPCCPU *cpu, int excp, target_ulong msr,
#endif
static void powerpc_set_excp_state(PowerPCCPU *cpu,
- target_ulong vector, target_ulong msr)
+ target_ulong vector, target_ulong msr)
{
CPUState *cs = CPU(cpu);
CPUPPCState *env = &cpu->env;
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v12 2/5] target/ppc: make power8-pmu.c CONFIG_TCG only
2022-02-16 10:10 [PATCH v12 0/5] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
2022-02-16 10:10 ` [PATCH v12 1/5] target/ppc: fix indent of powerpc_set_excp_state() Daniel Henrique Barboza
@ 2022-02-16 10:10 ` Daniel Henrique Barboza
2022-02-17 22:17 ` Richard Henderson
2022-02-16 10:11 ` [PATCH v12 3/5] target/ppc: finalize pre-EBB PMU logic Daniel Henrique Barboza
` (2 subsequent siblings)
4 siblings, 1 reply; 8+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-16 10:10 UTC (permalink / raw)
To: qemu-devel; +Cc: Fabiano Rosas, Daniel Henrique Barboza, qemu-ppc, clg, david
This is an exclusive TCG helper. Gating it with CONFIG_TCG and changing
meson.build accordingly will prevent problems --disable-tcg and
--disable-linux-user later on.
Suggested-by: Fabiano Rosas <farosas@linux.ibm.com>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
target/ppc/cpu_init.c | 5 ++---
target/ppc/machine.c | 2 ++
target/ppc/meson.build | 2 +-
target/ppc/power8-pmu.h | 4 ++--
4 files changed, 7 insertions(+), 6 deletions(-)
diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
index d97f718354..8fc644f8d6 100644
--- a/target/ppc/cpu_init.c
+++ b/target/ppc/cpu_init.c
@@ -6379,7 +6379,7 @@ static void register_power9_mmu_sprs(CPUPPCState *env)
*/
static void init_tcg_pmu_power8(CPUPPCState *env)
{
-#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
+#if defined(CONFIG_TCG)
/* Init PMU overflow timers */
if (!kvm_enabled()) {
cpu_ppc_pmu_init(env);
@@ -7872,10 +7872,9 @@ static void ppc_cpu_reset(DeviceState *dev)
if (env->mmu_model != POWERPC_MMU_REAL) {
ppc_tlb_invalidate_all(env);
}
+ pmu_update_summaries(env);
#endif /* CONFIG_TCG */
#endif
-
- pmu_update_summaries(env);
hreg_compute_hflags(env);
env->reserve_addr = (target_ulong)-1ULL;
/* Be sure no exception or interrupt is pending */
diff --git a/target/ppc/machine.c b/target/ppc/machine.c
index 1b63146ed1..a4b0fa1a78 100644
--- a/target/ppc/machine.c
+++ b/target/ppc/machine.c
@@ -20,7 +20,9 @@ static void post_load_update_msr(CPUPPCState *env)
*/
env->msr ^= env->msr_mask & ~((1ULL << MSR_TGPR) | MSR_HVB);
ppc_store_msr(env, msr);
+#if defined(CONFIG_TCG)
pmu_update_summaries(env);
+#endif
}
static int get_avr(QEMUFile *f, void *pv, size_t size,
diff --git a/target/ppc/meson.build b/target/ppc/meson.build
index a49a8911e0..79beaff147 100644
--- a/target/ppc/meson.build
+++ b/target/ppc/meson.build
@@ -16,6 +16,7 @@ ppc_ss.add(when: 'CONFIG_TCG', if_true: files(
'misc_helper.c',
'timebase_helper.c',
'translate.c',
+ 'power8-pmu.c',
))
ppc_ss.add(libdecnumber)
@@ -51,7 +52,6 @@ ppc_softmmu_ss.add(when: 'TARGET_PPC64', if_true: files(
'mmu-book3s-v3.c',
'mmu-hash64.c',
'mmu-radix64.c',
- 'power8-pmu.c',
))
target_arch += {'ppc': ppc_ss}
diff --git a/target/ppc/power8-pmu.h b/target/ppc/power8-pmu.h
index a839199561..256d90f523 100644
--- a/target/ppc/power8-pmu.h
+++ b/target/ppc/power8-pmu.h
@@ -13,11 +13,11 @@
#ifndef POWER8_PMU
#define POWER8_PMU
-void cpu_ppc_pmu_init(CPUPPCState *env);
-
#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
+void cpu_ppc_pmu_init(CPUPPCState *env);
void pmu_update_summaries(CPUPPCState *env);
#else
+static inline void cpu_ppc_pmu_init(CPUPPCState *env) { }
static inline void pmu_update_summaries(CPUPPCState *env) { }
#endif
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v12 3/5] target/ppc: finalize pre-EBB PMU logic
2022-02-16 10:10 [PATCH v12 0/5] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
2022-02-16 10:10 ` [PATCH v12 1/5] target/ppc: fix indent of powerpc_set_excp_state() Daniel Henrique Barboza
2022-02-16 10:10 ` [PATCH v12 2/5] target/ppc: make power8-pmu.c CONFIG_TCG only Daniel Henrique Barboza
@ 2022-02-16 10:11 ` Daniel Henrique Barboza
2022-02-16 10:11 ` [PATCH v12 4/5] target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions Daniel Henrique Barboza
2022-02-16 10:11 ` [PATCH v12 5/5] target/ppc: trigger PERFM EBBs from power8-pmu.c Daniel Henrique Barboza
4 siblings, 0 replies; 8+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-16 10:11 UTC (permalink / raw)
To: qemu-devel; +Cc: Daniel Henrique Barboza, qemu-ppc, clg, david
There are still PMU exclusive bits to handle in fire_PMC_interrupt()
before implementing the EBB support. Let's finalize it now to avoid
dealing with PMU and EBB logic at the same time in the next patches.
fire_PMC_interrupt() will fire an Performance Monitor alert depending on
MMCR0_PMAE. If we are required to freeze the timers (MMCR0_FCECE) we'll
also need to update summaries and delete the existing overflow timers.
In all cases we're going to update the cycle counters.
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
target/ppc/power8-pmu.c | 36 ++++++++++++++++++++++++++++++++++--
1 file changed, 34 insertions(+), 2 deletions(-)
diff --git a/target/ppc/power8-pmu.c b/target/ppc/power8-pmu.c
index 236e8e66e9..d245663158 100644
--- a/target/ppc/power8-pmu.c
+++ b/target/ppc/power8-pmu.c
@@ -222,6 +222,20 @@ static void pmu_update_overflow_timers(CPUPPCState *env)
}
}
+static void pmu_delete_timers(CPUPPCState *env)
+{
+ QEMUTimer *pmc_overflow_timer;
+ int sprn;
+
+ for (sprn = SPR_POWER_PMC1; sprn <= SPR_POWER_PMC6; sprn++) {
+ pmc_overflow_timer = get_cyc_overflow_timer(env, sprn);
+
+ if (pmc_overflow_timer) {
+ timer_del(pmc_overflow_timer);
+ }
+ }
+}
+
void helper_store_mmcr0(CPUPPCState *env, target_ulong value)
{
bool hflags_pmcc0 = (value & MMCR0_PMCC0) != 0;
@@ -271,8 +285,26 @@ static void fire_PMC_interrupt(PowerPCCPU *cpu)
{
CPUPPCState *env = &cpu->env;
- if (!(env->spr[SPR_POWER_MMCR0] & MMCR0_EBE)) {
- return;
+ pmu_update_cycles(env);
+
+ if (env->spr[SPR_POWER_MMCR0] & MMCR0_FCECE) {
+ env->spr[SPR_POWER_MMCR0] &= ~MMCR0_FCECE;
+ env->spr[SPR_POWER_MMCR0] |= MMCR0_FC;
+
+ /* Changing MMCR0_FC requires a new HFLAGS_INSN_CNT calc */
+ pmu_update_summaries(env);
+
+ /*
+ * Delete all pending timers if we need to freeze
+ * the PMC. We'll restart them when the PMC starts
+ * running again.
+ */
+ pmu_delete_timers(env);
+ }
+
+ if (env->spr[SPR_POWER_MMCR0] & MMCR0_PMAE) {
+ env->spr[SPR_POWER_MMCR0] &= ~MMCR0_PMAE;
+ env->spr[SPR_POWER_MMCR0] |= MMCR0_PMAO;
}
/* PMC interrupt not implemented yet */
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v12 4/5] target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions
2022-02-16 10:10 [PATCH v12 0/5] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
` (2 preceding siblings ...)
2022-02-16 10:11 ` [PATCH v12 3/5] target/ppc: finalize pre-EBB PMU logic Daniel Henrique Barboza
@ 2022-02-16 10:11 ` Daniel Henrique Barboza
2022-02-16 10:11 ` [PATCH v12 5/5] target/ppc: trigger PERFM EBBs from power8-pmu.c Daniel Henrique Barboza
4 siblings, 0 replies; 8+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-16 10:11 UTC (permalink / raw)
To: qemu-devel; +Cc: Daniel Henrique Barboza, qemu-ppc, clg, david
PPC_INTERRUPT_EBB is a new interrupt that will be used to deliver EBB
exceptions that had to be postponed because the thread wasn't in problem
state at the time the event-based branch was supposed to occur.
ISA 3.1 also defines two EBB exceptions: Performance Monitor EBB
exception and External EBB exception. They are being added as
POWERPC_EXCP_PERFM_EBB and POWERPC_EXCP_EXTERNAL_EBB.
PPC_INTERRUPT_EBB will check BESCR bits to see the EBB type that
occurred and trigger the appropriate exception. Both exceptions are
doing the same thing in this first implementation: clear BESCR_GE and
enter the branch with env->nip retrieved from SPR_EBBHR.
The checks being done by the interrupt code are msr_pr and BESCR_GE
states. All other checks (EBB facility check, BESCR_PME bit, specific
bits related to the event type) must be done beforehand.
Reviewed-by: Cédric Le Goater <clg@kaod.org>
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
target/ppc/cpu.h | 5 ++++-
target/ppc/cpu_init.c | 4 ++++
target/ppc/excp_helper.c | 33 +++++++++++++++++++++++++++++++++
3 files changed, 41 insertions(+), 1 deletion(-)
diff --git a/target/ppc/cpu.h b/target/ppc/cpu.h
index 555c6b9245..e8a423d14d 100644
--- a/target/ppc/cpu.h
+++ b/target/ppc/cpu.h
@@ -127,8 +127,10 @@ enum {
/* ISA 3.00 additions */
POWERPC_EXCP_HVIRT = 101,
POWERPC_EXCP_SYSCALL_VECTORED = 102, /* scv exception */
+ POWERPC_EXCP_PERFM_EBB = 103, /* Performance Monitor EBB Exception */
+ POWERPC_EXCP_EXTERNAL_EBB = 104, /* External EBB Exception */
/* EOL */
- POWERPC_EXCP_NB = 103,
+ POWERPC_EXCP_NB = 105,
/* QEMU exceptions: special cases we want to stop translation */
POWERPC_EXCP_SYSCALL_USER = 0x203, /* System call in user mode only */
};
@@ -2426,6 +2428,7 @@ enum {
PPC_INTERRUPT_HMI, /* Hypervisor Maintenance interrupt */
PPC_INTERRUPT_HDOORBELL, /* Hypervisor Doorbell interrupt */
PPC_INTERRUPT_HVIRT, /* Hypervisor virtualization interrupt */
+ PPC_INTERRUPT_EBB, /* Event-based Branch exception */
};
/* Processor Compatibility mask (PCR) */
diff --git a/target/ppc/cpu_init.c b/target/ppc/cpu_init.c
index 8fc644f8d6..8ddac4e2fe 100644
--- a/target/ppc/cpu_init.c
+++ b/target/ppc/cpu_init.c
@@ -2239,6 +2239,10 @@ static void init_excp_POWER8(CPUPPCState *env)
env->excp_vectors[POWERPC_EXCP_FU] = 0x00000F60;
env->excp_vectors[POWERPC_EXCP_HV_FU] = 0x00000F80;
env->excp_vectors[POWERPC_EXCP_SDOOR_HV] = 0x00000E80;
+
+ /* Userland exceptions without vector value in PowerISA v3.1 */
+ env->excp_vectors[POWERPC_EXCP_PERFM_EBB] = 0x0;
+ env->excp_vectors[POWERPC_EXCP_EXTERNAL_EBB] = 0x0;
#endif
}
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index bbc75afbc0..04c61cff39 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -1513,6 +1513,21 @@ static void powerpc_excp_books(PowerPCCPU *cpu, int excp)
new_msr |= (target_ulong)MSR_HVB;
new_msr |= env->msr & ((target_ulong)1 << MSR_RI);
break;
+ case POWERPC_EXCP_PERFM_EBB: /* Performance Monitor EBB Exception */
+ case POWERPC_EXCP_EXTERNAL_EBB: /* External EBB Exception */
+ env->spr[SPR_BESCR] &= ~BESCR_GE;
+
+ /*
+ * Save NIP for rfebb insn in SPR_EBBRR. Next nip is
+ * stored in the EBB Handler SPR_EBBHR.
+ */
+ env->spr[SPR_EBBRR] = env->nip;
+ powerpc_set_excp_state(cpu, env->spr[SPR_EBBHR], env->msr);
+
+ /*
+ * This exception is handled in userspace. No need to proceed.
+ */
+ return;
case POWERPC_EXCP_THERM: /* Thermal interrupt */
case POWERPC_EXCP_PERFM: /* Embedded performance monitor interrupt */
case POWERPC_EXCP_VPUA: /* Vector assist exception */
@@ -1742,6 +1757,24 @@ static void ppc_hw_interrupt(CPUPPCState *env)
powerpc_excp(cpu, POWERPC_EXCP_THERM);
return;
}
+ /* EBB exception */
+ if (env->pending_interrupts & (1 << PPC_INTERRUPT_EBB)) {
+ /*
+ * EBB exception must be taken in problem state and
+ * with BESCR_GE set.
+ */
+ if (msr_pr == 1 && env->spr[SPR_BESCR] & BESCR_GE) {
+ env->pending_interrupts &= ~(1 << PPC_INTERRUPT_EBB);
+
+ if (env->spr[SPR_BESCR] & BESCR_PMEO) {
+ powerpc_excp(cpu, POWERPC_EXCP_PERFM_EBB);
+ } else if (env->spr[SPR_BESCR] & BESCR_EEO) {
+ powerpc_excp(cpu, POWERPC_EXCP_EXTERNAL_EBB);
+ }
+
+ return;
+ }
+ }
}
if (env->resume_as_sreset) {
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH v12 5/5] target/ppc: trigger PERFM EBBs from power8-pmu.c
2022-02-16 10:10 [PATCH v12 0/5] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
` (3 preceding siblings ...)
2022-02-16 10:11 ` [PATCH v12 4/5] target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions Daniel Henrique Barboza
@ 2022-02-16 10:11 ` Daniel Henrique Barboza
4 siblings, 0 replies; 8+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-16 10:11 UTC (permalink / raw)
To: qemu-devel; +Cc: Daniel Henrique Barboza, qemu-ppc, clg, david
This patch adds the EBB exception support that are triggered by
Performance Monitor alerts. This happens when a Performance Monitor
alert occurs and MMCR0_EBE, BESCR_PME and BESCR_GE are set.
fire_PMC_interrupt() will execute a new ebb_perfm_excp() helper that
will check for MMCR0_EBE, BESCR_PME and BESCR_GE bits. If all bits are
set, do_ebb() will attempt to trigger a PERFM EBB event.
If the EBB facility is enabled in both FSCR and HFSCR we consider that
the EBB is valid and set BESCR_PMEO. After that, if we're running in
problem state, fire a POWERPC_EXCP_PERM_EBB immediately. Otherwise we'll
queue a PPC_INTERRUPT_EBB.
Signed-off-by: Daniel Henrique Barboza <danielhb413@gmail.com>
---
target/ppc/excp_helper.c | 48 ++++++++++++++++++++++++++++++++++++++++
target/ppc/helper.h | 1 +
target/ppc/power8-pmu.c | 3 +--
3 files changed, 50 insertions(+), 2 deletions(-)
diff --git a/target/ppc/excp_helper.c b/target/ppc/excp_helper.c
index 04c61cff39..32a28ecce2 100644
--- a/target/ppc/excp_helper.c
+++ b/target/ppc/excp_helper.c
@@ -2009,6 +2009,54 @@ void helper_rfebb(CPUPPCState *env, target_ulong s)
env->spr[SPR_BESCR] &= ~BESCR_GE;
}
}
+
+/*
+ * Triggers or queues an 'ebb_excp' EBB exception. All checks
+ * but FSCR, HFSCR and msr_pr must be done beforehand.
+ *
+ * PowerISA v3.1 isn't clear about whether an EBB should be
+ * postponed or cancelled if the EBB facility is unavailable.
+ * Our assumption here is that the EBB is cancelled if both
+ * FSCR and HFSCR EBB facilities aren't available.
+ */
+static void do_ebb(CPUPPCState *env, int ebb_excp)
+{
+ PowerPCCPU *cpu = env_archcpu(env);
+ CPUState *cs = CPU(cpu);
+
+ /*
+ * FSCR_EBB and FSCR_IC_EBB are the same bits used with
+ * HFSCR.
+ */
+ helper_fscr_facility_check(env, FSCR_EBB, 0, FSCR_IC_EBB);
+ helper_hfscr_facility_check(env, FSCR_EBB, "EBB", FSCR_IC_EBB);
+
+ if (ebb_excp == POWERPC_EXCP_PERFM_EBB) {
+ env->spr[SPR_BESCR] |= BESCR_PMEO;
+ } else if (ebb_excp == POWERPC_EXCP_EXTERNAL_EBB) {
+ env->spr[SPR_BESCR] |= BESCR_EEO;
+ }
+
+ if (msr_pr == 1) {
+ powerpc_excp(cpu, ebb_excp);
+ } else {
+ env->pending_interrupts |= 1 << PPC_INTERRUPT_EBB;
+ cpu_interrupt(cs, CPU_INTERRUPT_HARD);
+ }
+}
+
+void helper_ebb_perfm_excp(CPUPPCState *env)
+{
+ bool perfm_ebb_enabled = env->spr[SPR_POWER_MMCR0] & MMCR0_EBE &&
+ env->spr[SPR_BESCR] & BESCR_PME &&
+ env->spr[SPR_BESCR] & BESCR_GE;
+
+ if (!perfm_ebb_enabled) {
+ return;
+ }
+
+ do_ebb(env, POWERPC_EXCP_PERFM_EBB);
+}
#endif
/*****************************************************************************/
diff --git a/target/ppc/helper.h b/target/ppc/helper.h
index ab008c9d4e..8c2c03fd48 100644
--- a/target/ppc/helper.h
+++ b/target/ppc/helper.h
@@ -18,6 +18,7 @@ DEF_HELPER_1(rfid, void, env)
DEF_HELPER_1(rfscv, void, env)
DEF_HELPER_1(hrfid, void, env)
DEF_HELPER_2(rfebb, void, env, tl)
+DEF_HELPER_1(ebb_perfm_excp, void, env)
DEF_HELPER_2(store_lpcr, void, env, tl)
DEF_HELPER_2(store_pcr, void, env, tl)
DEF_HELPER_2(store_mmcr0, void, env, tl)
diff --git a/target/ppc/power8-pmu.c b/target/ppc/power8-pmu.c
index d245663158..38e1ecb782 100644
--- a/target/ppc/power8-pmu.c
+++ b/target/ppc/power8-pmu.c
@@ -307,8 +307,7 @@ static void fire_PMC_interrupt(PowerPCCPU *cpu)
env->spr[SPR_POWER_MMCR0] |= MMCR0_PMAO;
}
- /* PMC interrupt not implemented yet */
- return;
+ helper_ebb_perfm_excp(env);
}
/* This helper assumes that the PMC is running. */
--
2.34.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH v12 2/5] target/ppc: make power8-pmu.c CONFIG_TCG only
2022-02-16 10:10 ` [PATCH v12 2/5] target/ppc: make power8-pmu.c CONFIG_TCG only Daniel Henrique Barboza
@ 2022-02-17 22:17 ` Richard Henderson
2022-02-24 20:14 ` Daniel Henrique Barboza
0 siblings, 1 reply; 8+ messages in thread
From: Richard Henderson @ 2022-02-17 22:17 UTC (permalink / raw)
To: Daniel Henrique Barboza, qemu-devel; +Cc: david, qemu-ppc, clg, Fabiano Rosas
On 2/16/22 21:10, Daniel Henrique Barboza wrote:
> static void init_tcg_pmu_power8(CPUPPCState *env)
> {
> -#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
> +#if defined(CONFIG_TCG)
> /* Init PMU overflow timers */
> if (!kvm_enabled()) {
> cpu_ppc_pmu_init(env);
> @@ -7872,10 +7872,9 @@ static void ppc_cpu_reset(DeviceState *dev)
> if (env->mmu_model != POWERPC_MMU_REAL) {
> ppc_tlb_invalidate_all(env);
> }
> + pmu_update_summaries(env);
> #endif /* CONFIG_TCG */
> #endif
> -
> - pmu_update_summaries(env);
It looks like you could remove all of the ifdefs if you simply use tcg_enabled() rather
than !kvm_enabled(). If !defined(CONFIG_TCG), tcg_enabled() will be constant false, and
the block will be optimized away.
r~
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH v12 2/5] target/ppc: make power8-pmu.c CONFIG_TCG only
2022-02-17 22:17 ` Richard Henderson
@ 2022-02-24 20:14 ` Daniel Henrique Barboza
0 siblings, 0 replies; 8+ messages in thread
From: Daniel Henrique Barboza @ 2022-02-24 20:14 UTC (permalink / raw)
To: Richard Henderson, qemu-devel; +Cc: david, qemu-ppc, clg, Fabiano Rosas
On 2/17/22 19:17, Richard Henderson wrote:
> On 2/16/22 21:10, Daniel Henrique Barboza wrote:
>> static void init_tcg_pmu_power8(CPUPPCState *env)
>> {
>> -#if defined(TARGET_PPC64) && !defined(CONFIG_USER_ONLY)
>> +#if defined(CONFIG_TCG)
>> /* Init PMU overflow timers */
>> if (!kvm_enabled()) {
>> cpu_ppc_pmu_init(env);
>> @@ -7872,10 +7872,9 @@ static void ppc_cpu_reset(DeviceState *dev)
>> if (env->mmu_model != POWERPC_MMU_REAL) {
>> ppc_tlb_invalidate_all(env);
>> }
>> + pmu_update_summaries(env);
>> #endif /* CONFIG_TCG */
>> #endif
>> -
>> - pmu_update_summaries(env);
>
> It looks like you could remove all of the ifdefs if you simply use tcg_enabled() rather than !kvm_enabled(). If !defined(CONFIG_TCG), tcg_enabled() will be constant false, and the block will be optimized away.
Just tested and it works. Thanks for the tip.
I'll re-send with this change.
Thanks,
Daniel
>
>
> r~
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-02-24 20:15 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-16 10:10 [PATCH v12 0/5] PMU-EBB support for PPC64 TCG Daniel Henrique Barboza
2022-02-16 10:10 ` [PATCH v12 1/5] target/ppc: fix indent of powerpc_set_excp_state() Daniel Henrique Barboza
2022-02-16 10:10 ` [PATCH v12 2/5] target/ppc: make power8-pmu.c CONFIG_TCG only Daniel Henrique Barboza
2022-02-17 22:17 ` Richard Henderson
2022-02-24 20:14 ` Daniel Henrique Barboza
2022-02-16 10:11 ` [PATCH v12 3/5] target/ppc: finalize pre-EBB PMU logic Daniel Henrique Barboza
2022-02-16 10:11 ` [PATCH v12 4/5] target/ppc: add PPC_INTERRUPT_EBB and EBB exceptions Daniel Henrique Barboza
2022-02-16 10:11 ` [PATCH v12 5/5] target/ppc: trigger PERFM EBBs from power8-pmu.c Daniel Henrique Barboza
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.