From f11d22a3d10693796dcf8ae2e2e0cb681a071be6 Mon Sep 17 00:00:00 2001 From: Sean Christopherson Date: Thu, 28 May 2026 07:32:41 -0700 Subject: [PATCH 4/4] static_call: Add FOR_MODULES static call exports, use 'em in KVM Signed-off-by: Sean Christopherson --- arch/x86/kvm/pmu.c | 2 +- arch/x86/kvm/x86.c | 6 +++--- include/linux/kvm_types.h | 8 ++++++++ include/linux/static_call.h | 12 +++++++----- 4 files changed, 19 insertions(+), 9 deletions(-) diff --git a/arch/x86/kvm/pmu.c b/arch/x86/kvm/pmu.c index b92dd2e58335..7e4f6e5ff436 100644 --- a/arch/x86/kvm/pmu.c +++ b/arch/x86/kvm/pmu.c @@ -100,7 +100,7 @@ static struct kvm_pmu_ops kvm_pmu_ops __read_mostly; #define KVM_X86_PMU_OP_OPTIONAL KVM_X86_PMU_OP #define KVM_X86_PMU_OP_OPTIONAL_RET0 KVM_X86_PMU_OP #include -EXPORT_STATIC_CALL_GPL(kvm_x86_pmu_pmc_is_disabled_in_current_mode); +EXPORT_STATIC_CALL_FOR_KVM_INTERNAL(kvm_x86_pmu_pmc_is_disabled_in_current_mode); void kvm_pmu_ops_update(const struct kvm_pmu_ops *pmu_ops) { diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c index e6f1dd84f22d..e52eba5fe373 100644 --- a/arch/x86/kvm/x86.c +++ b/arch/x86/kvm/x86.c @@ -149,9 +149,9 @@ struct kvm_x86_ops kvm_x86_ops __read_mostly; #define KVM_X86_OP_OPTIONAL KVM_X86_OP #define KVM_X86_OP_OPTIONAL_RET0 KVM_X86_OP #include -EXPORT_STATIC_CALL_GPL(kvm_x86_get_cs_db_l_bits); -EXPORT_STATIC_CALL_GPL(kvm_x86_cache_reg); -EXPORT_STATIC_CALL_GPL(kvm_x86_get_cpl); +EXPORT_STATIC_CALL_FOR_KVM_INTERNAL(kvm_x86_get_cs_db_l_bits); +EXPORT_STATIC_CALL_FOR_KVM_INTERNAL(kvm_x86_cache_reg); +EXPORT_STATIC_CALL_FOR_KVM_INTERNAL(kvm_x86_get_cpl); static bool __read_mostly ignore_msrs = 0; module_param(ignore_msrs, bool, 0644); diff --git a/include/linux/kvm_types.h b/include/linux/kvm_types.h index a568d8e6f4e8..3bf9d113b001 100644 --- a/include/linux/kvm_types.h +++ b/include/linux/kvm_types.h @@ -13,8 +13,14 @@ EXPORT_SYMBOL_FOR_MODULES(symbol, __stringify(KVM_SUB_MODULES)) #define EXPORT_SYMBOL_FOR_KVM(symbol) \ EXPORT_SYMBOL_FOR_MODULES(symbol, "kvm," __stringify(KVM_SUB_MODULES)) +#define EXPORT_STATIC_CALL_FOR_KVM_INTERNAL(symbol) \ + EXPORT_STATIC_CALL_FOR_MODULES(symbol, __stringify(KVM_SUB_MODULES)) +#define EXPORT_STATIC_CALL_FOR_KVM(symbol) \ + EXPORT_STATIC_CALL_FOR_MODULES(symbol, "kvm," __stringify(KVM_SUB_MODULES)) #else #define EXPORT_SYMBOL_FOR_KVM_INTERNAL(symbol) +#define EXPORT_STATIC_CALL_FOR_KVM_INTERNAL(symbol) + /* * Allow architectures to provide a custom EXPORT_SYMBOL_FOR_KVM, but only * if there are no submodules, e.g. to allow suppressing exports if KVM=m, but @@ -23,8 +29,10 @@ #ifndef EXPORT_SYMBOL_FOR_KVM #if IS_MODULE(CONFIG_KVM) #define EXPORT_SYMBOL_FOR_KVM(symbol) EXPORT_SYMBOL_FOR_MODULES(symbol, "kvm") +#define EXPORT_STATIC_CALL_FOR_KVM(symbol) EXPORT_STATIC_CALL_FOR_MODULES(symbol, "kvm") #else #define EXPORT_SYMBOL_FOR_KVM(symbol) +#define EXPORT_STATIC_CALL_FOR_KVM(symbol) #endif /* IS_MODULE(CONFIG_KVM) */ #endif /* EXPORT_SYMBOL_FOR_KVM */ #endif diff --git a/include/linux/static_call.h b/include/linux/static_call.h index c2c667baf8fe..9b38f82b35c4 100644 --- a/include/linux/static_call.h +++ b/include/linux/static_call.h @@ -206,8 +206,8 @@ extern long __static_call_return0(void); #define ARCH_ADD_TRAMP_KEY(name) #endif -#define __EXPORT_STATIC_CALL(name, scope) \ - EXPORT_SYMBOL##scope(STATIC_CALL_TRAMP(name)); \ +#define __EXPORT_STATIC_CALL(name, scope, ...) \ + EXPORT_SYMBOL##scope(STATIC_CALL_TRAMP(name), ##__VA_ARGS__); \ ARCH_ADD_TRAMP_KEY(name) #elif defined(CONFIG_HAVE_STATIC_CALL) @@ -255,8 +255,8 @@ static inline int static_call_text_reserved(void *start, void *end) extern long __static_call_return0(void); -#define __EXPORT_STATIC_CALL(name, scope) \ - EXPORT_SYMBOL##scope(STATIC_CALL_TRAMP(name)) +#define __EXPORT_STATIC_CALL(name, scope, ...) \ + EXPORT_SYMBOL##scope(STATIC_CALL_TRAMP(name), ##__VA_ARGS__) #else /* Generic implementation */ @@ -319,7 +319,7 @@ static inline int static_call_text_reserved(void *start, void *end) return 0; } -#define __EXPORT_STATIC_CALL(name, scope) +#define __EXPORT_STATIC_CALL(name, scope, ...) #endif /* CONFIG_HAVE_STATIC_CALL */ @@ -339,5 +339,7 @@ static inline int static_call_text_reserved(void *start, void *end) __EXPORT_STATIC_CALL(name, ) #define EXPORT_STATIC_CALL_GPL(name) \ __EXPORT_STATIC_CALL(name, _GPL) +#define EXPORT_STATIC_CALL_FOR_MODULES(name, mods) \ + __EXPORT_STATIC_CALL(name, _FOR_MODULES, mods) #endif /* _LINUX_STATIC_CALL_H */ -- 2.54.0.794.g4f17f83d09-goog