]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
mm: numa: guarantee that tlb_flush_pending updates are visible before page table...
authorMel Gorman <mgorman@suse.de>
Mon, 16 Dec 2013 23:44:45 +0000 (10:44 +1100)
committerStephen Rothwell <sfr@canb.auug.org.au>
Mon, 16 Dec 2013 23:44:45 +0000 (10:44 +1100)
According to documentation on barriers, stores issued before a LOCK can
complete after the lock implying that it's possible tlb_flush_pending can
be visible after a page table update.  As per revised documentation, this
patch adds a smp_mb__before_spinlock to guarantee the correct ordering.

Signed-off-by: Mel Gorman <mgorman@suse.de>
Acked-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Rik van Riel <riel@redhat.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
include/linux/mm_types.h

index e5c49c30460f12ae42a8873ad0e1c733f9d64411..ad0616f2fe2c38d825d899c00f4e79e696c291ac 100644 (file)
@@ -482,7 +482,12 @@ static inline bool mm_tlb_flush_pending(struct mm_struct *mm)
 static inline void set_tlb_flush_pending(struct mm_struct *mm)
 {
        mm->tlb_flush_pending = true;
-       barrier();
+
+       /*
+        * Guarantee that the tlb_flush_pending store does not leak into the
+        * critical section updating the page tables
+        */
+       smp_mb__before_spinlock();
 }
 /* Clearing is done after a TLB flush, which also provides a barrier. */
 static inline void clear_tlb_flush_pending(struct mm_struct *mm)