Excerpts from Kajol Jain's message of July 11, 2022 1:49 pm: > File book3s_hv_p9_entry.c in powerpc/kvm folder consists of functions > like freeze_pmu, switch_pmu_to_guest and switch_pmu_to_host which are > specific to Performance Monitoring Unit(PMU) for power9 and later > platforms. > > For better maintenance, moving pmu related code from > book3s_hv_p9_entry.c to a new file called book3s_hv_p9_perf.c, > without any logic change. > Also make corresponding changes in the Makefile to include > book3s_hv_p9_perf.c during compilation.
> + > + if (ppc_get_pmu_inuse()) { > + mtspr(SPRN_PMC1, host_os_sprs->pmc1); > + mtspr(SPRN_PMC2, host_os_sprs->pmc2); > + mtspr(SPRN_PMC3, host_os_sprs->pmc3); > + mtspr(SPRN_PMC4, host_os_sprs->pmc4); > + mtspr(SPRN_PMC5, host_os_sprs->pmc5); > + mtspr(SPRN_PMC6, host_os_sprs->pmc6); > + mtspr(SPRN_MMCR1, host_os_sprs->mmcr1); > + mtspr(SPRN_MMCR2, host_os_sprs->mmcr2); > + mtspr(SPRN_SDAR, host_os_sprs->sdar); > + mtspr(SPRN_SIAR, host_os_sprs->siar); > + mtspr(SPRN_SIER, host_os_sprs->sier1); > + > + if (cpu_has_feature(CPU_FTR_ARCH_31)) { > + mtspr(SPRN_MMCR3, host_os_sprs->mmcr3); > + mtspr(SPRN_SIER2, host_os_sprs->sier2); > + mtspr(SPRN_SIER3, host_os_sprs->sier3); > + } > + > + /* Set MMCRA then MMCR0 last */ > + mtspr(SPRN_MMCRA, host_os_sprs->mmcra); > + mtspr(SPRN_MMCR0, host_os_sprs->mmcr0); > + isync(); > + } > +} > +EXPORT_SYMBOL_GPL(switch_pmu_to_host); > I'm still thinking these parts of the code in particular that do the host PMU save/restore could be handled by calls into perf subsystem. In some cases it doesn't need to save SPRs because it can recreate them or is not using them. Maybe it's not so simple. Either way, I'm fine with this move to stat with. Reviewed-by: Nicholas Piggin <npig...@gmail.com>