mirror of
https://github.com/torvalds/linux.git
synced 2026-07-31 03:27:03 +02:00
KVM: x86/pmu: Add support for KVM_X86_PMU_OP_OPTIONAL_RET0
Add definitions for KVM_X86_PMU_OP_OPTIONAL_RET0() to resolve to __static_call_return0, similar to KVM_X86_OP_OPTIONAL_RET0(). Move the definition of kvm_pmu_call() to pmu.h, and add declarations for the static PMU calls in the header to allow making callbacks from the header in following changes. Suggested-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Yosry Ahmed <yosry@kernel.org> Link: https://patch.msgid.link/20260527234711.4175166-10-yosry@kernel.org Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
parent
232eadc311
commit
f98ef41a5a
|
|
@ -1,6 +1,7 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#if !defined(KVM_X86_PMU_OP) || \
|
||||
!defined(KVM_X86_PMU_OP_OPTIONAL)
|
||||
!defined(KVM_X86_PMU_OP_OPTIONAL) || \
|
||||
!defined(KVM_X86_PMU_OP_OPTIONAL_RET0)
|
||||
#error Missing one or more KVM_X86_PMU_OP #defines
|
||||
#else
|
||||
|
||||
|
|
@ -31,3 +32,4 @@ KVM_X86_PMU_OP(mediated_put)
|
|||
|
||||
#undef KVM_X86_PMU_OP
|
||||
#undef KVM_X86_PMU_OP_OPTIONAL
|
||||
#undef KVM_X86_PMU_OP_OPTIONAL_RET0
|
||||
|
|
|
|||
|
|
@ -2065,7 +2065,6 @@ extern bool __read_mostly enable_device_posted_irqs;
|
|||
extern struct kvm_x86_ops kvm_x86_ops;
|
||||
|
||||
#define kvm_x86_call(func) static_call(kvm_x86_##func)
|
||||
#define kvm_pmu_call(func) static_call(kvm_x86_pmu_##func)
|
||||
|
||||
#define KVM_X86_OP(func) \
|
||||
DECLARE_STATIC_CALL(kvm_x86_##func, *(((struct kvm_x86_ops *)0)->func));
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ static struct kvm_pmu_ops kvm_pmu_ops __read_mostly;
|
|||
DEFINE_STATIC_CALL_NULL(kvm_x86_pmu_##func, \
|
||||
*(((struct kvm_pmu_ops *)0)->func));
|
||||
#define KVM_X86_PMU_OP_OPTIONAL KVM_X86_PMU_OP
|
||||
#define KVM_X86_PMU_OP_OPTIONAL_RET0 KVM_X86_PMU_OP
|
||||
#include <asm/kvm-x86-pmu-ops.h>
|
||||
|
||||
void kvm_pmu_ops_update(const struct kvm_pmu_ops *pmu_ops)
|
||||
|
|
@ -109,6 +110,9 @@ void kvm_pmu_ops_update(const struct kvm_pmu_ops *pmu_ops)
|
|||
#define KVM_X86_PMU_OP(func) \
|
||||
WARN_ON(!kvm_pmu_ops.func); __KVM_X86_PMU_OP(func)
|
||||
#define KVM_X86_PMU_OP_OPTIONAL __KVM_X86_PMU_OP
|
||||
#define KVM_X86_PMU_OP_OPTIONAL_RET0(func) \
|
||||
static_call_update(kvm_x86_pmu_##func, (void *)kvm_pmu_ops.func ? : \
|
||||
(void *)__static_call_return0);
|
||||
#include <asm/kvm-x86-pmu-ops.h>
|
||||
#undef __KVM_X86_PMU_OP
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,6 +53,14 @@ struct kvm_pmu_ops {
|
|||
const u32 MSR_STRIDE;
|
||||
};
|
||||
|
||||
#define kvm_pmu_call(func) static_call(kvm_x86_pmu_##func)
|
||||
|
||||
#define KVM_X86_PMU_OP(func) \
|
||||
DECLARE_STATIC_CALL(kvm_x86_pmu_##func, *(((struct kvm_pmu_ops *)0)->func));
|
||||
#define KVM_X86_PMU_OP_OPTIONAL KVM_X86_PMU_OP
|
||||
#define KVM_X86_PMU_OP_OPTIONAL_RET0 KVM_X86_PMU_OP
|
||||
#include <asm/kvm-x86-pmu-ops.h>
|
||||
|
||||
extern bool enable_pmu;
|
||||
extern bool enable_mediated_pmu;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user