KVM: Add a simplified wrapper for registering perf callbacks

Add a parameter-less API for registering perf callbacks in anticipation of
introducing another x86-only parameter for handling mediated PMU PMIs.

No functional change intended.

Acked-by: Anup Patel <anup@brainfault.org>
Tested-by: Xudong Hao <xudong.hao@intel.com>
Tested-by: Manali Shukla <manali.shukla@amd.com>
Link: https://patch.msgid.link/20251206001720.468579-15-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
Sean Christopherson 2025-12-05 16:16:50 -08:00
parent 01122b8936
commit 4b24910c05
6 changed files with 16 additions and 8 deletions

View file

@ -2357,7 +2357,7 @@ static int __init init_subsystems(void)
if (err)
goto out;
kvm_register_perf_callbacks(NULL);
kvm_register_perf_callbacks();
out:
if (err)

View file

@ -394,7 +394,7 @@ static int kvm_loongarch_env_init(void)
}
kvm_init_gcsr_flag();
kvm_register_perf_callbacks(NULL);
kvm_register_perf_callbacks();
/* Register LoongArch IPI interrupt controller interface. */
ret = kvm_loongarch_register_ipi_device();

View file

@ -174,7 +174,7 @@ static int __init riscv_kvm_init(void)
kvm_riscv_setup_vendor_features();
kvm_register_perf_callbacks(NULL);
kvm_register_perf_callbacks();
rc = kvm_init(sizeof(struct kvm_vcpu), 0, THIS_MODULE);
if (rc) {

View file

@ -10107,7 +10107,7 @@ int kvm_x86_vendor_init(struct kvm_x86_init_ops *ops)
set_hv_tscchange_cb(kvm_hyperv_tsc_notifier);
#endif
kvm_register_perf_callbacks(ops->handle_intel_pt_intr);
__kvm_register_perf_callbacks(ops->handle_intel_pt_intr, NULL);
if (IS_ENABLED(CONFIG_KVM_SW_PROTECTED_VM) && tdp_mmu_enabled)
kvm_caps.supported_vm_types |= BIT(KVM_X86_SW_PROTECTED_VM);

View file

@ -1749,10 +1749,17 @@ static inline bool kvm_arch_intc_initialized(struct kvm *kvm)
#ifdef CONFIG_GUEST_PERF_EVENTS
unsigned long kvm_arch_vcpu_get_ip(struct kvm_vcpu *vcpu);
void kvm_register_perf_callbacks(unsigned int (*pt_intr_handler)(void));
void __kvm_register_perf_callbacks(unsigned int (*pt_intr_handler)(void),
void (*mediated_pmi_handler)(void));
static inline void kvm_register_perf_callbacks(void)
{
__kvm_register_perf_callbacks(NULL, NULL);
}
void kvm_unregister_perf_callbacks(void);
#else
static inline void kvm_register_perf_callbacks(void *ign) {}
static inline void kvm_register_perf_callbacks(void) {}
static inline void kvm_unregister_perf_callbacks(void) {}
#endif /* CONFIG_GUEST_PERF_EVENTS */

View file

@ -6470,10 +6470,11 @@ static struct perf_guest_info_callbacks kvm_guest_cbs = {
.handle_mediated_pmi = NULL,
};
void kvm_register_perf_callbacks(unsigned int (*pt_intr_handler)(void))
void __kvm_register_perf_callbacks(unsigned int (*pt_intr_handler)(void),
void (*mediated_pmi_handler)(void))
{
kvm_guest_cbs.handle_intel_pt_intr = pt_intr_handler;
kvm_guest_cbs.handle_mediated_pmi = NULL;
kvm_guest_cbs.handle_mediated_pmi = mediated_pmi_handler;
perf_register_guest_info_callbacks(&kvm_guest_cbs);
}