On Thu, Sep 28, 2023, Paolo Bonzini wrote: > Neither tdp_mmu_next_root nor kvm_tdp_mmu_put_root need to know > if the lock is taken for read or write. Either way, protection > is achieved via RCU and tdp_mmu_pages_lock. Remove the argument > and just assert that the lock is taken. > > Signed-off-by: Paolo Bonzini <pbonzini@xxxxxxxxxx> > --- > +void kvm_tdp_mmu_put_root(struct kvm *kvm, struct kvm_mmu_page *root) > { > - kvm_lockdep_assert_mmu_lock_held(kvm, shared); > + /* > + * Either read or write is okay, but the lock is needed because > + * writers might not take tdp_mmu_pages_lock. > + */ Nit, I'd prefer to say mmu_lock instead of "the lock", and be very explicit about writers not needing to take tdp_mmu_pages_lock, e.g. /* * Either read or write is okay, but mmu_lock must be held as writers * are not required to take tdp_mmu_pages_lock. */ > + lockdep_assert_held(&kvm->mmu_lock); > > if (!refcount_dec_and_test(&root->tdp_mmu_root_count)) > return;