|
@@ -6669,7 +6669,20 @@ static bool nested_vmx_exit_handled(struct kvm_vcpu *vcpu)
|
|
|
return nested_cpu_has2(vmcs12,
|
|
|
SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES);
|
|
|
case EXIT_REASON_EPT_VIOLATION:
|
|
|
+ /*
|
|
|
+ * L0 always deals with the EPT violation. If nested EPT is
|
|
|
+ * used, and the nested mmu code discovers that the address is
|
|
|
+ * missing in the guest EPT table (EPT12), the EPT violation
|
|
|
+ * will be injected with nested_ept_inject_page_fault()
|
|
|
+ */
|
|
|
+ return 0;
|
|
|
case EXIT_REASON_EPT_MISCONFIG:
|
|
|
+ /*
|
|
|
+ * L2 never uses directly L1's EPT, but rather L0's own EPT
|
|
|
+ * table (shadow on EPT) or a merged EPT table that L0 built
|
|
|
+ * (EPT on EPT). So any problems with the structure of the
|
|
|
+ * table is L0's fault.
|
|
|
+ */
|
|
|
return 0;
|
|
|
case EXIT_REASON_PREEMPTION_TIMER:
|
|
|
return vmcs12->pin_based_vm_exec_control &
|