summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/linux/futex.h9
1 files changed, 8 insertions, 1 deletions
diff --git a/include/linux/futex.h b/include/linux/futex.h
index eccc99751bd9..168ffd5996b4 100644
--- a/include/linux/futex.h
+++ b/include/linux/futex.h
@@ -88,7 +88,14 @@ void futex_hash_free(struct mm_struct *mm);
static inline void futex_mm_init(struct mm_struct *mm)
{
- rcu_assign_pointer(mm->futex_phash, NULL);
+ /*
+ * No need for rcu_assign_pointer() here, as we can rely on
+ * tasklist_lock write-ordering in copy_process(), before
+ * the task's MM becomes visible and the ->futex_phash
+ * becomes externally observable:
+ */
+ mm->futex_phash = NULL;
+
mutex_init(&mm->futex_hash_lock);
}