[Devel] [svt-core] [PATCH rh7 v1 3/5] ms/kvm/x86: Pass return code of kvm_emulate_hypercall
Andrey Smetanin
asmetanin at virtuozzo.com
Fri Feb 19 03:28:52 PST 2016
On 02/19/2016 02:25 PM, Andrey Smetanin wrote:
> Pass the return code from kvm_emulate_hypercall on to the caller,
> in order to allow it to indicate to the userspace that
> the hypercall has to be handled there.
>
> Also adjust all the existing code paths to return 1 to make sure the
> hypercall isn't passed to the userspace without setting kvm_run
> appropriately.
>
> Signed-off-by: Andrey Smetanin <asmetanin at virtuozzo.com>
> Reviewed-by: Roman Kagan <rkagan at virtuozzo.com>
> CC: Gleb Natapov <gleb at kernel.org>
> CC: Paolo Bonzini <pbonzini at redhat.com>
> CC: Joerg Roedel <joro at 8bytes.org>
> CC: "K. Y. Srinivasan" <kys at microsoft.com>
> CC: Haiyang Zhang <haiyangz at microsoft.com>
> CC: Roman Kagan <rkagan at virtuozzo.com>
> CC: Denis V. Lunev <den at openvz.org>
> CC: qemu-devel at nongnu.org
> Signed-off-by: Paolo Bonzini <pbonzini at redhat.com>
> (cherry picked from commit 0d9c055eaaf41bebb0e6b095fff447523121fad3)
> ---
> arch/x86/kvm/hyperv.c | 2 +-
> arch/x86/kvm/svm.c | 3 +--
> arch/x86/kvm/vmx.c | 2 +-
> 3 files changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c
> index c4c1a80..7638214 100644
> --- a/arch/x86/kvm/hyperv.c
> +++ b/arch/x86/kvm/hyperv.c
> @@ -1056,7 +1056,7 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu)
> */
> if (kvm_x86_ops->get_cpl(vcpu) != 0 || !is_protmode(vcpu)) {
> kvm_queue_exception(vcpu, UD_VECTOR);
> - return 0;
> + return 1;
> }
>
> kvm_x86_ops->get_cs_db_l_bits(vcpu, &cs_db, &cs_l);
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> index f8bde17..12850b2 100644
> --- a/arch/x86/kvm/svm.c
> +++ b/arch/x86/kvm/svm.c
> @@ -1942,8 +1942,7 @@ static int vmmcall_interception(struct vcpu_svm *svm)
> {
> svm->next_rip = kvm_rip_read(&svm->vcpu) + 3;
> skip_emulated_instruction(&svm->vcpu);
> - kvm_emulate_hypercall(&svm->vcpu);
> - return 1;
> + return kvm_emulate_hypercall(&svm->vcpu);
> }
>
> static unsigned long nested_svm_get_tdp_cr3(struct kvm_vcpu *vcpu)
> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c
> index 4474efc..8a7f697 100644
> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -5301,7 +5301,7 @@ static int handle_vmcall(struct kvm_vcpu *vcpu)
> {
> skip_emulated_instruction(vcpu);
> kvm_emulate_hypercall(vcpu);
> - return 1;
> + return kvm_emulate_hypercall(vcpu);
bad error here, kvm_emulate_hypercall is called twice will resend this
patch with V2.
> }
>
> static int handle_invd(struct kvm_vcpu *vcpu)
>
More information about the Devel
mailing list