On Tue, Jan 26, 2021 at 5:37 AM Paolo Bonzini <pbonzini@xxxxxxxxxx> wrote: > > On 12/01/21 19:10, Ben Gardon wrote: > > + * May be acquired under the MMU lock in read mode or non-overlapping > > + * with the MMU lock. > > + */ > > + spinlock_t tdp_mmu_pages_lock; > > Is this correct? My understanding is that: > > - you can take tdp_mmu_pages_lock from a shared MMU lock critical section > > - you don't need to take tdp_mmu_pages_lock from an exclusive MMU lock > critical section, because you can't be concurrent with a shared critical > section > > - but then, you can't take tdp_mmu_pages_lock outside the MMU lock, > because you could have > > write_lock(mmu_lock) > spin_lock(tdp_mmu_pages_lock) > do tdp_mmu_pages_lock stuff !!! do tdp_mmu_pages_lock stuff > write_unlock(mmu_lock) > spin_unlock(tdp_mmu_pages_lock) > You're absolutely right, that would cause a problem. I'll amend the comment to specify that the lock should only be held under the mmu lock in read mode. > Paolo >