On Thu, Aug 22, 2019 at 10:42:39AM +0200, Daniel Vetter wrote:
RDMA has a mutex:
ib_umem_notifier_invalidate_range_end rbt_ib_umem_for_each_in_range invalidate_range_start_trampoline ib_umem_notifier_end_account mutex_lock(&umem_odp->umem_mutex);
I'm working to delete this path though!
nonblocking or not follows the start, the same flag gets placed into the mmu_notifier_range struct passed to end.
Ok, makes sense.
I guess that also means the might_sleep (I started on that) in invalidate_range_end also needs to be conditional? Or not bother with a might_sleep in invalidate_range_end since you're working on removing the last sleep in there?
I might suggest the same pattern as used for locked, the might_sleep unconditionally on the start, and a 2nd might sleep after the IF in __mmu_notifier_invalidate_range_end()
Observing that by audit all the callers already have the same locking context for start/end
Jason