Message ID | 20220216101102.179158-3-danielhb413@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | PMU-EBB support for PPC64 TCG | expand |
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~
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~
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
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(-)