KVM: VMX: Fix undefined beaviour of EPT after reload kvm-intel.ko

As well as move set base/mask ptes to vmx_init().

Signed-off-by: Sheng Yang <sheng.yang@intel.com>
Signed-off-by: Avi Kivity <avi@qumranet.com>

authored by

Sheng Yang and committed by
Avi Kivity
5fdbcb9d 5ec5726a

+10 -10
+10 -10
arch/x86/kvm/vmx.c
··· 3118 3118 return ERR_PTR(-ENOMEM); 3119 3119 3120 3120 allocate_vpid(vmx); 3121 - if (id == 0 && vm_need_ept()) { 3122 - kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | 3123 - VMX_EPT_WRITABLE_MASK | 3124 - VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); 3125 - kvm_mmu_set_mask_ptes(0ull, VMX_EPT_FAKE_ACCESSED_MASK, 3126 - VMX_EPT_FAKE_DIRTY_MASK, 0ull, 3127 - VMX_EPT_EXECUTABLE_MASK); 3128 - kvm_enable_tdp(); 3129 - } 3130 3121 3131 3122 err = kvm_vcpu_init(&vmx->vcpu, kvm, id); 3132 3123 if (err) ··· 3296 3305 vmx_disable_intercept_for_msr(vmx_msr_bitmap, MSR_IA32_SYSENTER_ESP); 3297 3306 vmx_disable_intercept_for_msr(vmx_msr_bitmap, MSR_IA32_SYSENTER_EIP); 3298 3307 3299 - if (vm_need_ept()) 3308 + if (vm_need_ept()) { 3300 3309 bypass_guest_pf = 0; 3310 + kvm_mmu_set_base_ptes(VMX_EPT_READABLE_MASK | 3311 + VMX_EPT_WRITABLE_MASK | 3312 + VMX_EPT_DEFAULT_MT << VMX_EPT_MT_EPTE_SHIFT); 3313 + kvm_mmu_set_mask_ptes(0ull, VMX_EPT_FAKE_ACCESSED_MASK, 3314 + VMX_EPT_FAKE_DIRTY_MASK, 0ull, 3315 + VMX_EPT_EXECUTABLE_MASK); 3316 + kvm_enable_tdp(); 3317 + } else 3318 + kvm_disable_tdp(); 3301 3319 3302 3320 if (bypass_guest_pf) 3303 3321 kvm_mmu_set_nonpresent_ptes(~0xffeull, 0ull);