summaryrefslogtreecommitdiff
path: root/arch/x86/include/asm/kvm_host.h
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2022-02-15 13:07:10 -0500
committerPaolo Bonzini <pbonzini@redhat.com>2022-02-18 12:44:22 -0500
commit5be2226f417d5b06d17e6c52d6e341cf43c29e48 (patch)
tree21110cf9b519a8c4de6fb799ed7db0ffdb4117a5 /arch/x86/include/asm/kvm_host.h
parentabb6d479e22642c82d552970d85edd9b5fe8beb6 (diff)
downloadlwn-5be2226f417d5b06d17e6c52d6e341cf43c29e48.tar.gz
lwn-5be2226f417d5b06d17e6c52d6e341cf43c29e48.zip
KVM: x86: allow defining return-0 static calls
A few vendor callbacks are only used by VMX, but they return an integer or bool value. Introduce KVM_X86_OP_OPTIONAL_RET0 for them: if a func is NULL in struct kvm_x86_ops, it will be changed to __static_call_return0 when updating static calls. Reviewed-by: Sean Christopherson <seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Diffstat (limited to 'arch/x86/include/asm/kvm_host.h')
-rw-r--r--arch/x86/include/asm/kvm_host.h4
1 files changed, 4 insertions, 0 deletions
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index a7e82fc1f1f3..8e512f25a930 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -1541,6 +1541,7 @@ extern struct kvm_x86_ops kvm_x86_ops;
#define KVM_X86_OP(func) \
DECLARE_STATIC_CALL(kvm_x86_##func, *(((struct kvm_x86_ops *)0)->func));
#define KVM_X86_OP_OPTIONAL KVM_X86_OP
+#define KVM_X86_OP_OPTIONAL_RET0 KVM_X86_OP
#include <asm/kvm-x86-ops.h>
static inline void kvm_ops_static_call_update(void)
@@ -1550,6 +1551,9 @@ static inline void kvm_ops_static_call_update(void)
#define KVM_X86_OP(func) \
WARN_ON(!kvm_x86_ops.func); __KVM_X86_OP(func)
#define KVM_X86_OP_OPTIONAL __KVM_X86_OP
+#define KVM_X86_OP_OPTIONAL_RET0(func) \
+ static_call_update(kvm_x86_##func, kvm_x86_ops.func ? : \
+ (void *) __static_call_return0);
#include <asm/kvm-x86-ops.h>
#undef __KVM_X86_OP
}