From 6428ca8f5be736ae25f26f4834252feeebc02759 Mon Sep 17 00:00:00 2001 From: Zide Chen Date: Thu, 20 May 2021 16:10:12 -0700 Subject: [PATCH] hv: VMPTRLD and VMCLEAR VMCS with the common APIs Remove the direct calls to exec_vmptrld() or exec_vmclear(), and replace with the wrapper APIs load_va_vmcs() and clear_va_vmcs(). Tracked-On: #5923 Signed-off-by: Zide Chen --- hypervisor/arch/x86/guest/vmcs.c | 10 +++------- hypervisor/arch/x86/vmx.c | 5 +---- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/hypervisor/arch/x86/guest/vmcs.c b/hypervisor/arch/x86/guest/vmcs.c index c548f4f8d..10fb0f404 100644 --- a/hypervisor/arch/x86/guest/vmcs.c +++ b/hypervisor/arch/x86/guest/vmcs.c @@ -545,7 +545,6 @@ static void init_exit_ctrl(const struct acrn_vcpu *vcpu) void init_vmcs(struct acrn_vcpu *vcpu) { uint64_t vmx_rev_id; - uint64_t vmcs_pa; void **vmcs_ptr = &get_cpu_var(vmcs_run); /* Log message */ @@ -556,11 +555,10 @@ void init_vmcs(struct acrn_vcpu *vcpu) (void)memcpy_s(vcpu->arch.vmcs, 4U, (void *)&vmx_rev_id, 4U); /* Execute VMCLEAR VMCS of this vcpu */ - vmcs_pa = hva2hpa(vcpu->arch.vmcs); - exec_vmclear((void *)&vmcs_pa); + clear_va_vmcs(vcpu->arch.vmcs); /* Load VMCS pointer */ - exec_vmptrld((void *)&vmcs_pa); + load_va_vmcs(vcpu->arch.vmcs); *vmcs_ptr = (void *)vcpu->arch.vmcs; /* Initialize the Virtual Machine Control Structure (VMCS) */ @@ -577,12 +575,10 @@ void init_vmcs(struct acrn_vcpu *vcpu) */ void load_vmcs(const struct acrn_vcpu *vcpu) { - uint64_t vmcs_pa; void **vmcs_ptr = &get_cpu_var(vmcs_run); if (vcpu->launched && (*vmcs_ptr != (void *)vcpu->arch.vmcs)) { - vmcs_pa = hva2hpa(vcpu->arch.vmcs); - exec_vmptrld((void *)&vmcs_pa); + load_va_vmcs(vcpu->arch.vmcs); *vmcs_ptr = (void *)vcpu->arch.vmcs; } } diff --git a/hypervisor/arch/x86/vmx.c b/hypervisor/arch/x86/vmx.c index 6379ca65d..eecae67f3 100644 --- a/hypervisor/arch/x86/vmx.c +++ b/hypervisor/arch/x86/vmx.c @@ -139,10 +139,7 @@ void vmx_off(void) void **vmcs_ptr = &get_cpu_var(vmcs_run); if (*vmcs_ptr != NULL) { - uint64_t vmcs_pa; - - vmcs_pa = hva2hpa(*vmcs_ptr); - exec_vmclear((void *)&vmcs_pa); + clear_va_vmcs(*vmcs_ptr); *vmcs_ptr = NULL; }