On 5/15/2025 6:48 AM, Sean Christopherson wrote:
On Mon, Mar 24, 2025, Mingwei Zhang wrote:
+/*
- Currently invoked at VM creation to
- Check whether there are existing !exclude_guest events of PMU with
- PERF_PMU_CAP_MEDIATED_VPMU
- Set nr_mediated_pmu_vms to prevent !exclude_guest event creation on
- PMUs with PERF_PMU_CAP_MEDIATED_VPMU
- No impact for the PMU without PERF_PMU_CAP_MEDIATED_VPMU. The perf
- still owns all the PMU resources.
- */
+int perf_get_mediated_pmu(void) +{
- guard(mutex)(&perf_mediated_pmu_mutex);
- if (atomic_inc_not_zero(&nr_mediated_pmu_vms))
return 0;
- if (atomic_read(&nr_include_guest_events))
return -EBUSY;
- atomic_inc(&nr_mediated_pmu_vms);
- return 0;
+} +EXPORT_SYMBOL_GPL(perf_get_mediated_pmu);
IMO, all of the mediated PMU logic should be guarded with a Kconfig. I strongly suspect KVM x86 will be the only user for the foreseeable, e.g. arm64 is trending toward a partioned PMU approach, and subjecting other architectures to the (minor) overhead associated with e.g. nr_mediated_pmu_vms seems pointless. The other nicety is that it helps encapsulate the mediated PMU code, which for those of us that haven't been living and breathing this for the last few months, is immensely helpful.
I'm fine with this.
+void perf_put_mediated_pmu(void)
To avoid confusion with perf_put_guest_context() in future patches, I think it makes sense to go with something like perf_{create,release}_mediated_pmu(). I actually like the get/put terminology in isolation, but they look weird side-by-side.
Agree.