On Mon, Oct 09, 2023, Sean Christopherson wrote: > On Mon, Oct 09, 2023, Sean Christopherson wrote: > > On Sat, Oct 07, 2023, Like Xu wrote: > > > On 14/7/2023 2:50 pm, Yan Zhao wrote: > > > > diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h > > > > index 92d5a1924fc1..38bd449226f6 100644 > > > > --- a/arch/x86/kvm/mmu.h > > > > +++ b/arch/x86/kvm/mmu.h > > > > @@ -235,6 +235,13 @@ static inline u8 permission_fault(struct kvm_vcpu *vcpu, struct kvm_mmu *mmu, > > > > return -(u32)fault & errcode; > > > > } > > > > +bool __kvm_mmu_honors_guest_mtrrs(struct kvm *kvm, bool vm_has_noncoherent_dma); > > > > + > > > > +static inline bool kvm_mmu_honors_guest_mtrrs(struct kvm *kvm) > > > > +{ > > > > + return __kvm_mmu_honors_guest_mtrrs(kvm, kvm_arch_has_noncoherent_dma(kvm)); > > > > +} > > > > + > > > > void kvm_zap_gfn_range(struct kvm *kvm, gfn_t gfn_start, gfn_t gfn_end); > > > > int kvm_arch_write_log_dirty(struct kvm_vcpu *vcpu); > > > > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c > > > > index 1e5db621241f..b4f89f015c37 100644 > > > > --- a/arch/x86/kvm/mmu/mmu.c > > > > +++ b/arch/x86/kvm/mmu/mmu.c > > > > @@ -4516,6 +4516,21 @@ static int kvm_tdp_mmu_page_fault(struct kvm_vcpu *vcpu, > > > > } > > > > #endif > > > > +bool __kvm_mmu_honors_guest_mtrrs(struct kvm *kvm, bool vm_has_noncoherent_dma) > > > > > > According to the motivation provided in the comment, the function will no > > > longer need to be passed the parameter "struct kvm *kvm" but will rely on > > > the global parameters (plus vm_has_noncoherent_dma), removing "*kvm" ? > > > > Yeah, I'll fixup the commit to drop @kvm from the inner helper. Thanks! > > Gah, and I gave more bad advice when I suggested this idea. There's no need to > explicitly check tdp_enabled, as shadow_memtype_mask is set to zero if TDP is > disabled. And that must be the case, e.g. make_spte() would generate a corrupt > shadow_memtype_mask were non-zero on Intel with shadow paging. > > Yan, can you take a look at what I ended up with (see below) to make sure it > looks sane/acceptable to you? > > New hashes (assuming I didn't botch things and need even more fixup). Oof, today is not my day. I forgot to fix the missing "check" in the changelog that Yan reported. So *these* are the new hashes, barring yet another goof on my end. [1/5] KVM: x86/mmu: Add helpers to return if KVM honors guest MTRRs https://github.com/kvm-x86/linux/commit/1affe455d66d [2/5] KVM: x86/mmu: Zap SPTEs when CR0.CD is toggled iff guest MTRRs are honored https://github.com/kvm-x86/linux/commit/7a18c7c2b69a [3/5] KVM: x86/mmu: Zap SPTEs on MTRR update iff guest MTRRs are honored https://github.com/kvm-x86/linux/commit/9a3768191d95 [4/5] KVM: x86/mmu: Zap KVM TDP when noncoherent DMA assignment starts/stops https://github.com/kvm-x86/linux/commit/68c320298404 [5/5] KVM: VMX: drop IPAT in memtype when CD=1 for KVM_X86_QUIRK_CD_NW_CLEARED https://github.com/kvm-x86/linux/commit/8925b3194512