mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2026-06-08 01:54:44 +00:00
modulization: vmx on/off should not use vcpu param
vmx.c should only take care host vmx operations, which should not contain vcpu reference, so refine vmx on/off APIs, move out use of vcpu by adding one per cpu vmcs_run pointer. as now each pcpu only run on one vcpu, so just keep running vmcs in per cpu vmcs_run pointer is enough. Changes to be committed: modified: arch/x86/cpu.c modified: arch/x86/init.c modified: arch/x86/pm.c modified: arch/x86/vmcs.c modified: arch/x86/vmx.c modified: include/arch/x86/per_cpu.h modified: include/arch/x86/vmx.h Tracked-On: #1842 Signed-off-by: Jason Chen CJ <jason.cj.chen@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
@@ -873,6 +873,7 @@ 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 */
|
||||
pr_dbg("Initializing VMCS");
|
||||
@@ -881,12 +882,16 @@ void init_vmcs(struct acrn_vcpu *vcpu)
|
||||
vmx_rev_id = msr_read(MSR_IA32_VMX_BASIC);
|
||||
(void)memcpy_s(vcpu->arch.vmcs, 4U, (void *)&vmx_rev_id, 4U);
|
||||
|
||||
/* Execute VMCLEAR on current VMCS */
|
||||
vmcs_pa = hva2hpa(vcpu->arch.vmcs);
|
||||
exec_vmclear((void *)&vmcs_pa);
|
||||
/* Execute VMCLEAR on previous un-clear VMCS */
|
||||
if (*vmcs_ptr != NULL) {
|
||||
vmcs_pa = hva2hpa(*vmcs_ptr);
|
||||
exec_vmclear((void *)&vmcs_pa);
|
||||
}
|
||||
|
||||
/* Load VMCS pointer */
|
||||
vmcs_pa = hva2hpa(vcpu->arch.vmcs);
|
||||
exec_vmptrld((void *)&vmcs_pa);
|
||||
*vmcs_ptr = (void *)vcpu->arch.vmcs;
|
||||
|
||||
/* Initialize the Virtual Machine Control Structure (VMCS) */
|
||||
init_host_state();
|
||||
|
||||
Reference in New Issue
Block a user