|
@@ -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)
|
|
static inline void set_tlb_flush_pending(struct mm_struct *mm)
|
|
{
|
|
{
|
|
mm->tlb_flush_pending = true;
|
|
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. */
|
|
/* Clearing is done after a TLB flush, which also provides a barrier. */
|
|
static inline void clear_tlb_flush_pending(struct mm_struct *mm)
|
|
static inline void clear_tlb_flush_pending(struct mm_struct *mm)
|