On Fri, Nov 22, 2019 at 04:54:08PM -0800, Ralph Campbell wrote: > Actually, I think you can remove the "need_wake" variable since it is > unconditionally set to "true". Oh, yes, thank you. An earlier revision had a different control flow > Also, the comment in__mmu_interval_notifier_insert() says > "mni->mr_invalidate_seq" and I think that should be > "mni->invalidate_seq". Got it. I squashed this in: diff --git a/mm/mmu_notifier.c b/mm/mmu_notifier.c index b3a064b3b31807..30abbfdc25be55 100644 --- a/mm/mmu_notifier.c +++ b/mm/mmu_notifier.c @@ -129,7 +129,6 @@ static void mn_itree_inv_end(struct mmu_notifier_mm *mmn_mm) { struct mmu_interval_notifier *mni; struct hlist_node *next; - bool need_wake = false; spin_lock(&mmn_mm->lock); if (--mmn_mm->active_invalidate_ranges || @@ -140,7 +139,6 @@ static void mn_itree_inv_end(struct mmu_notifier_mm *mmn_mm) /* Make invalidate_seq even */ mmn_mm->invalidate_seq++; - need_wake = true; /* * The inv_end incorporates a deferred mechanism like rtnl_unlock(). @@ -160,8 +158,7 @@ static void mn_itree_inv_end(struct mmu_notifier_mm *mmn_mm) } spin_unlock(&mmn_mm->lock); - if (need_wake) - wake_up_all(&mmn_mm->wq); + wake_up_all(&mmn_mm->wq); } /** @@ -884,7 +881,7 @@ static int __mmu_interval_notifier_insert( * possibility for live lock, instead defer the add to * mn_itree_inv_end() so this algorithm is deterministic. * - * In all cases the value for the mni->mr_invalidate_seq should be + * In all cases the value for the mni->invalidate_seq should be * odd, see mmu_interval_read_begin() */ spin_lock(&mmn_mm->lock); Jason