futex: Remove pointless mmgrap() + mmdrop()
authorPeter Zijlstra <peterz@infradead.org>
Wed, 4 Mar 2020 12:02:41 +0000 (13:02 +0100)
committerPeter Zijlstra <peterz@infradead.org>
Fri, 6 Mar 2020 10:06:18 +0000 (11:06 +0100)
We always set 'key->private.mm' to 'current->mm', getting an extra
reference on 'current->mm' is quite pointless, because as long as the
task is blocked it isn't going to go away.

Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
kernel/futex.c

index e14f7cd45dbd6dc59c373ed4cbdbca7256d87c08..3463c916605ad4cf5f1af0cfe9919bfc7f1d5e43 100644 (file)
@@ -331,17 +331,6 @@ static void compat_exit_robust_list(struct task_struct *curr);
 static inline void compat_exit_robust_list(struct task_struct *curr) { }
 #endif
 
-static inline void futex_get_mm(union futex_key *key)
-{
-       mmgrab(key->private.mm);
-       /*
-        * Ensure futex_get_mm() implies a full barrier such that
-        * get_futex_key() implies a full barrier. This is relied upon
-        * as smp_mb(); (B), see the ordering comment above.
-        */
-       smp_mb__after_atomic();
-}
-
 /*
  * Reflects a new waiter being added to the waitqueue.
  */
@@ -432,7 +421,7 @@ static void get_futex_key_refs(union futex_key *key)
                smp_mb();               /* explicit smp_mb(); (B) */
                break;
        case FUT_OFF_MMSHARED:
-               futex_get_mm(key); /* implies smp_mb(); (B) */
+               smp_mb();               /* explicit smp_mb(); (B) */
                break;
        default:
                /*
@@ -465,7 +454,6 @@ static void drop_futex_key_refs(union futex_key *key)
        case FUT_OFF_INODE:
                break;
        case FUT_OFF_MMSHARED:
-               mmdrop(key->private.mm);
                break;
        }
 }