On Fri, Dec 09, 2022 at 12:45:53PM +0800, Robert Hoo wrote: > When calc the new CR3 value, take LAM bits in. > > Signed-off-by: Robert Hoo <robert.hu@xxxxxxxxxxxxxxx> > Reviewed-by: Jingqi Liu <jingqi.liu@xxxxxxxxx> > --- > arch/x86/kvm/mmu.h | 5 +++++ > arch/x86/kvm/vmx/vmx.c | 3 ++- > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h > index 6bdaacb6faa0..866f2b7cb509 100644 > --- a/arch/x86/kvm/mmu.h > +++ b/arch/x86/kvm/mmu.h > @@ -142,6 +142,11 @@ static inline unsigned long kvm_get_active_pcid(struct kvm_vcpu *vcpu) > return kvm_get_pcid(vcpu, kvm_read_cr3(vcpu)); > } > > +static inline u64 kvm_get_active_lam(struct kvm_vcpu *vcpu) > +{ Unlike the PCIDs, LAM bits in CR3 are not sharing with other features, (e.g. PCID vs non-PCIN on bit 0:11) so not check CR4[28] here should be fine, otherwise follows kvm_get_pcid() looks better. > + return kvm_read_cr3(vcpu) & (X86_CR3_LAM_U48 | X86_CR3_LAM_U57); > +} > + > static inline void kvm_mmu_load_pgd(struct kvm_vcpu *vcpu) > { > u64 root_hpa = vcpu->arch.mmu->root.hpa; > diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c > index cfa06c7c062e..9985dbb63e7b 100644 > --- a/arch/x86/kvm/vmx/vmx.c > +++ b/arch/x86/kvm/vmx/vmx.c > @@ -3261,7 +3261,8 @@ static void vmx_load_mmu_pgd(struct kvm_vcpu *vcpu, hpa_t root_hpa, > update_guest_cr3 = false; > vmx_ept_load_pdptrs(vcpu); > } else { > - guest_cr3 = root_hpa | kvm_get_active_pcid(vcpu); > + guest_cr3 = root_hpa | kvm_get_active_pcid(vcpu) | > + kvm_get_active_lam(vcpu); > } > > if (update_guest_cr3) > -- > 2.31.1 >