Hi, This patch series aim to enhance L1<->L2 transitions to avoid unnecessary TLB flushes in case L1 uses VPID and EPT. The 1st patch fixes a bug that INVEPT was executed on L1<->L2 transitions to flush TLB but with the wrong EPTP because it hasn't been loaded yet with the destination EPTP. The patch handles this issue easily by just delaying vmx_flush_tlb() to be called after EPTP has been set to destination by using KVM_REQ_TLB_FLUSH. The 2nd patch avoids unnecessary flushing TLB on L2->L1 VMExit if L1 uses VPID and EPT. This is because TLB entries of L1 and L2 are separated by the fact they are tagged with different EPTP. The 3rd patch modifies L1->L2 VMEntry code such that it will set vmcs02->vpid to vmcs12->vpid in case L1 uses EPT. This leverages the fact TLB entries of L1 and L2 are separated by being tagged with different EPTPs and therefore we don't need to use the special vpid02. The 4rd patch then modifies L1->L2 VMEntry code to avoid unnecessary flushing TLB in case L1 uses both VPID and EPT as TLB entries of L1 and L2 are separated by different EPTP tags. Regards, -Liran