mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-29 17:35:36 -04:00
KVM: x86: Use static_call() for copy/move encryption context ioctls()
Define and use static_call()s for .vm_{copy,move}_enc_context_from(),
mostly so that the op is defined in kvm-x86-ops.h. This will allow using
KVM_X86_OP in vendor code to wire up the implementation. Any performance
gains eeked out by using static_call() is a happy bonus and not the
primary motiviation.
Opportunistically refactor the code to reduce indentation and keep line
lengths reasonable, and to be consistent when wrapping versus running
a bit over the 80 char soft limit.
Signed-off-by: Sean Christopherson <seanjc@google.com>
Message-Id: <20220128005208.4008533-12-seanjc@google.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
committed by
Paolo Bonzini
parent
dfc4e6ca04
commit
7ad02ef0da
@@ -115,6 +115,8 @@ KVM_X86_OP(enable_smi_window)
|
||||
KVM_X86_OP_NULL(mem_enc_op)
|
||||
KVM_X86_OP_NULL(mem_enc_reg_region)
|
||||
KVM_X86_OP_NULL(mem_enc_unreg_region)
|
||||
KVM_X86_OP_NULL(vm_copy_enc_context_from)
|
||||
KVM_X86_OP_NULL(vm_move_enc_context_from)
|
||||
KVM_X86_OP(get_msr_feature)
|
||||
KVM_X86_OP(can_emulate_instruction)
|
||||
KVM_X86_OP(apic_init_signal_blocked)
|
||||
|
||||
@@ -5975,15 +5975,18 @@ int kvm_vm_ioctl_enable_cap(struct kvm *kvm,
|
||||
#endif
|
||||
case KVM_CAP_VM_COPY_ENC_CONTEXT_FROM:
|
||||
r = -EINVAL;
|
||||
if (kvm_x86_ops.vm_copy_enc_context_from)
|
||||
r = kvm_x86_ops.vm_copy_enc_context_from(kvm, cap->args[0]);
|
||||
return r;
|
||||
if (!kvm_x86_ops.vm_copy_enc_context_from)
|
||||
break;
|
||||
|
||||
r = static_call(kvm_x86_vm_copy_enc_context_from)(kvm, cap->args[0]);
|
||||
break;
|
||||
case KVM_CAP_VM_MOVE_ENC_CONTEXT_FROM:
|
||||
r = -EINVAL;
|
||||
if (kvm_x86_ops.vm_move_enc_context_from)
|
||||
r = kvm_x86_ops.vm_move_enc_context_from(
|
||||
kvm, cap->args[0]);
|
||||
return r;
|
||||
if (!kvm_x86_ops.vm_move_enc_context_from)
|
||||
break;
|
||||
|
||||
r = static_call(kvm_x86_vm_move_enc_context_from)(kvm, cap->args[0]);
|
||||
break;
|
||||
case KVM_CAP_EXIT_HYPERCALL:
|
||||
if (cap->args[0] & ~KVM_EXIT_HYPERCALL_VALID_MASK) {
|
||||
r = -EINVAL;
|
||||
|
||||
Reference in New Issue
Block a user