diff options
-rw-r--r-- | arch/x86/kvm/vmx.c | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c index 7d056f5385e7..c6f4ad44aa95 100644 --- a/arch/x86/kvm/vmx.c +++ b/arch/x86/kvm/vmx.c | |||
@@ -2766,8 +2766,11 @@ static void nested_vmx_setup_ctls_msrs(struct vcpu_vmx *vmx) | |||
2766 | vmx->nested.nested_vmx_ept_caps |= VMX_EPT_EXTENT_GLOBAL_BIT | | 2766 | vmx->nested.nested_vmx_ept_caps |= VMX_EPT_EXTENT_GLOBAL_BIT | |
2767 | VMX_EPT_EXTENT_CONTEXT_BIT | VMX_EPT_2MB_PAGE_BIT | | 2767 | VMX_EPT_EXTENT_CONTEXT_BIT | VMX_EPT_2MB_PAGE_BIT | |
2768 | VMX_EPT_1GB_PAGE_BIT; | 2768 | VMX_EPT_1GB_PAGE_BIT; |
2769 | if (enable_ept_ad_bits) | 2769 | if (enable_ept_ad_bits) { |
2770 | vmx->nested.nested_vmx_secondary_ctls_high |= | ||
2771 | SECONDARY_EXEC_ENABLE_PML; | ||
2770 | vmx->nested.nested_vmx_ept_caps |= VMX_EPT_AD_BIT; | 2772 | vmx->nested.nested_vmx_ept_caps |= VMX_EPT_AD_BIT; |
2773 | } | ||
2771 | } else | 2774 | } else |
2772 | vmx->nested.nested_vmx_ept_caps = 0; | 2775 | vmx->nested.nested_vmx_ept_caps = 0; |
2773 | 2776 | ||
@@ -8129,7 +8132,7 @@ static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu) | |||
8129 | case EXIT_REASON_PREEMPTION_TIMER: | 8132 | case EXIT_REASON_PREEMPTION_TIMER: |
8130 | return false; | 8133 | return false; |
8131 | case EXIT_REASON_PML_FULL: | 8134 | case EXIT_REASON_PML_FULL: |
8132 | /* We don't expose PML support to L1. */ | 8135 | /* We emulate PML support to L1. */ |
8133 | return false; | 8136 | return false; |
8134 | default: | 8137 | default: |
8135 | return true; | 8138 | return true; |
@@ -9924,7 +9927,7 @@ static int prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12, | |||
9924 | bool from_vmentry, u32 *entry_failure_code) | 9927 | bool from_vmentry, u32 *entry_failure_code) |
9925 | { | 9928 | { |
9926 | struct vcpu_vmx *vmx = to_vmx(vcpu); | 9929 | struct vcpu_vmx *vmx = to_vmx(vcpu); |
9927 | u32 exec_control; | 9930 | u32 exec_control, vmcs12_exec_ctrl; |
9928 | 9931 | ||
9929 | vmcs_write16(GUEST_ES_SELECTOR, vmcs12->guest_es_selector); | 9932 | vmcs_write16(GUEST_ES_SELECTOR, vmcs12->guest_es_selector); |
9930 | vmcs_write16(GUEST_CS_SELECTOR, vmcs12->guest_cs_selector); | 9933 | vmcs_write16(GUEST_CS_SELECTOR, vmcs12->guest_cs_selector); |
@@ -10055,8 +10058,11 @@ static int prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12, | |||
10055 | SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | | 10058 | SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY | |
10056 | SECONDARY_EXEC_APIC_REGISTER_VIRT); | 10059 | SECONDARY_EXEC_APIC_REGISTER_VIRT); |
10057 | if (nested_cpu_has(vmcs12, | 10060 | if (nested_cpu_has(vmcs12, |
10058 | CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)) | 10061 | CPU_BASED_ACTIVATE_SECONDARY_CONTROLS)) { |
10059 | exec_control |= vmcs12->secondary_vm_exec_control; | 10062 | vmcs12_exec_ctrl = vmcs12->secondary_vm_exec_control & |
10063 | ~SECONDARY_EXEC_ENABLE_PML; | ||
10064 | exec_control |= vmcs12_exec_ctrl; | ||
10065 | } | ||
10060 | 10066 | ||
10061 | if (exec_control & SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY) { | 10067 | if (exec_control & SECONDARY_EXEC_VIRTUAL_INTR_DELIVERY) { |
10062 | vmcs_write64(EOI_EXIT_BITMAP0, | 10068 | vmcs_write64(EOI_EXIT_BITMAP0, |