> On 6 Sep 2018, at 19:06, Jim Mattson <jmattson@xxxxxxxxxx> wrote: > > On Thu, Sep 6, 2018 at 6:32 AM, Liran Alon <liran.alon@xxxxxxxxxx> wrote: >> If CPU use both VPID and EPT, TLB entries populated by CPU are tagged >> with both EPTP and VPID. Therefore, if L1 uses EPT, L2 TLB entries >> are separated from L1 TLB entries by the EPTP tags as vmcs02 use >> EPTP02 while vmcs01 use EPTP01. >> >> Thus, we don't need to make sure that vmcs02->vpid != vmcs01->vpid. >> Therefore, we can just set vmcs02->vpid to vmcs12->vpid. >> >> Reviewed-by: Mihai Carabas <mihai.carabas@xxxxxxxxxx> >> Reviewed-by: Darren Kenny <darren.kenny@xxxxxxxxxx> >> Reviewed-by: Nikita Leshchenko <nikita.leshchenko@xxxxxxxxxx> >> Signed-off-by: Liran Alon <liran.alon@xxxxxxxxxx> > > I suggested this back in July, but Paolo didn't like it. I still like it. :-) > > Reviewed-by: Jim Mattson <jmattson@xxxxxxxxxx> Yes, you are right this is based on your suggestion. This is why I Cc you to this email thread. However, I forgot to: Suggested-by: Jim Mattson <jmattson@xxxxxxxxxx> Paolo/Radim, if you decide to apply this, please add this tag to the commit. Thanks, -Liran > >> --- >> arch/x86/kvm/vmx.c | 18 ++++++++++++++---- >> 1 file changed, 14 insertions(+), 4 deletions(-) >> >> diff --git a/arch/x86/kvm/vmx.c b/arch/x86/kvm/vmx.c >> index b97e0c5ccb46..98faba65c24a 100644 >> --- a/arch/x86/kvm/vmx.c >> +++ b/arch/x86/kvm/vmx.c >> @@ -12018,10 +12018,20 @@ static void prepare_vmcs02_full(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12) >> vmcs_write64(GUEST_BNDCFGS, vmcs12->guest_bndcfgs); >> >> if (enable_vpid) { >> - if (nested_cpu_has_vpid(vmcs12) && vmx->nested.vpid02) >> - vmcs_write16(VIRTUAL_PROCESSOR_ID, vmx->nested.vpid02); >> - else >> - vmcs_write16(VIRTUAL_PROCESSOR_ID, vmx->vpid); >> + u16 vmcs02_vpid; > > You could simplify the logic below if you initialize vmcs02_vpid to vmx->vpid. > BTW, when did we switch to compilation options that allow mid-block > declarations? Woohoo! > >> + if (nested_cpu_has_vpid(vmcs12)) { >> + if (nested_cpu_has_ept(vmcs12)) >> + vmcs02_vpid = vmcs12->virtual_processor_id; >> + else if (vmx->nested.vpid02) >> + vmcs02_vpid = vmx->nested.vpid02; >> + else >> + vmcs02_vpid = vmx->vpid; >> + } else { >> + vmcs02_vpid = vmx->vpid; >> + } >> + >> + vmcs_write16(VIRTUAL_PROCESSOR_ID, vmcs02_vpid); >> } >> >> /* >> -- >> 2.16.1 >>