KVM: x86: hyper-v: Use common code for hypercall userspace exit
authorVipin Sharma <vipinsh@google.com>
Mon, 12 Dec 2022 18:37:15 +0000 (10:37 -0800)
committerSean Christopherson <seanjc@google.com>
Wed, 1 Feb 2023 21:41:44 +0000 (13:41 -0800)
Remove duplicate code to exit to userspace for hyper-v hypercalls and
use a common place to exit.

No functional change intended.

Signed-off-by: Vipin Sharma <vipinsh@google.com>
Suggested-by: Sean Christopherson <seanjc@google.com>
Reviewed-by: Vitaly Kuznetsov <vkuznets@redhat.com>
Link: https://lore.kernel.org/r/20221212183720.4062037-9-vipinsh@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/hyperv.c

index 71aff0e..c3d1c52 100644 (file)
@@ -2531,14 +2531,7 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
                        ret = HV_STATUS_INVALID_HYPERCALL_INPUT;
                        break;
                }
-               vcpu->run->exit_reason = KVM_EXIT_HYPERV;
-               vcpu->run->hyperv.type = KVM_EXIT_HYPERV_HCALL;
-               vcpu->run->hyperv.u.hcall.input = hc.param;
-               vcpu->run->hyperv.u.hcall.params[0] = hc.ingpa;
-               vcpu->run->hyperv.u.hcall.params[1] = hc.outgpa;
-               vcpu->arch.complete_userspace_io =
-                               kvm_hv_hypercall_complete_userspace;
-               return 0;
+               goto hypercall_userspace_exit;
        case HVCALL_FLUSH_VIRTUAL_ADDRESS_LIST:
                if (unlikely(hc.var_cnt)) {
                        ret = HV_STATUS_INVALID_HYPERCALL_INPUT;
@@ -2597,14 +2590,7 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
                        ret = HV_STATUS_OPERATION_DENIED;
                        break;
                }
-               vcpu->run->exit_reason = KVM_EXIT_HYPERV;
-               vcpu->run->hyperv.type = KVM_EXIT_HYPERV_HCALL;
-               vcpu->run->hyperv.u.hcall.input = hc.param;
-               vcpu->run->hyperv.u.hcall.params[0] = hc.ingpa;
-               vcpu->run->hyperv.u.hcall.params[1] = hc.outgpa;
-               vcpu->arch.complete_userspace_io =
-                               kvm_hv_hypercall_complete_userspace;
-               return 0;
+               goto hypercall_userspace_exit;
        }
        default:
                ret = HV_STATUS_INVALID_HYPERCALL_CODE;
@@ -2613,6 +2599,15 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
 
 hypercall_complete:
        return kvm_hv_hypercall_complete(vcpu, ret);
+
+hypercall_userspace_exit:
+       vcpu->run->exit_reason = KVM_EXIT_HYPERV;
+       vcpu->run->hyperv.type = KVM_EXIT_HYPERV_HCALL;
+       vcpu->run->hyperv.u.hcall.input = hc.param;
+       vcpu->run->hyperv.u.hcall.params[0] = hc.ingpa;
+       vcpu->run->hyperv.u.hcall.params[1] = hc.outgpa;
+       vcpu->arch.complete_userspace_io = kvm_hv_hypercall_complete_userspace;
+       return 0;
 }
 
 void kvm_hv_init_vm(struct kvm *kvm)