On Thu, May 27, 2021, Sean Christopherson wrote: > On Fri, Apr 23, 2021, Sean Christopherson wrote: > > Remove the @reset_roots param from kvm_init_mmu(), the one user, > > kvm_mmu_reset_context() has already unloaded the MMU and thus freed and > > invalidated all roots. This also happens to be why the reset_roots=true > > paths doesn't leak roots; they're already invalid. > > > > No functional change intended. > > > > Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> > > --- > > arch/x86/kvm/mmu.h | 2 +- > > arch/x86/kvm/mmu/mmu.c | 13 ++----------- > > arch/x86/kvm/svm/nested.c | 2 +- > > arch/x86/kvm/vmx/nested.c | 2 +- > > 4 files changed, 5 insertions(+), 14 deletions(-) > > > > diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h > > index 88d0ed5225a4..63b49725fb24 100644 > > --- a/arch/x86/kvm/mmu.h > > +++ b/arch/x86/kvm/mmu.h > > @@ -65,7 +65,7 @@ void kvm_mmu_set_ept_masks(bool has_ad_bits, bool has_exec_only); > > void > > reset_shadow_zero_bits_mask(struct kvm_vcpu *vcpu, struct kvm_mmu *context); > > > > -void kvm_init_mmu(struct kvm_vcpu *vcpu, bool reset_roots); > > +void kvm_init_mmu(struct kvm_vcpu *vcpu); > > void kvm_init_shadow_npt_mmu(struct kvm_vcpu *vcpu, u32 cr0, u32 cr4, u32 efer, > > gpa_t nested_cr3); > > void kvm_init_shadow_ept_mmu(struct kvm_vcpu *vcpu, bool execonly, > > diff --git a/arch/x86/kvm/mmu/mmu.c b/arch/x86/kvm/mmu/mmu.c > > index 930ac8a7e7c9..ff3e200b32dd 100644 > > --- a/arch/x86/kvm/mmu/mmu.c > > +++ b/arch/x86/kvm/mmu/mmu.c > > @@ -4793,17 +4793,8 @@ static void init_kvm_nested_mmu(struct kvm_vcpu *vcpu) > > update_last_nonleaf_level(vcpu, g_context); > > } > > > > -void kvm_init_mmu(struct kvm_vcpu *vcpu, bool reset_roots) > > +void kvm_init_mmu(struct kvm_vcpu *vcpu) > > { > > - if (reset_roots) { > > - uint i; > > - > > - vcpu->arch.mmu->root_hpa = INVALID_PAGE; > > - > > - for (i = 0; i < KVM_MMU_NUM_PREV_ROOTS; i++) > > - vcpu->arch.mmu->prev_roots[i] = KVM_MMU_ROOT_INFO_INVALID; > > Egad! This is wrong. mmu->root_hpa is guaranteed to be INVALID_PAGE, but the > prev_roots are not! I'll drop this patch and do cleanup of this code in a > separate series. *sigh* Jumped the gun, I was right the first time. kvm_mmu_free_roots() does invalidate prev_roots[*] via mmu_free_root_page(). I still think I'll drop this patch from this series, I don't think there's anything in this series that is needed to purge @reset_roots. for (i = 0; i < KVM_MMU_NUM_PREV_ROOTS; i++) if (roots_to_free & KVM_MMU_ROOT_PREVIOUS(i)) mmu_free_root_page(kvm, &mmu->prev_roots[i].hpa, <-- tricky little devil &invalid_list); > > > - } > > - > > if (mmu_is_nested(vcpu)) > > init_kvm_nested_mmu(vcpu); > > else if (tdp_enabled)