rcu: Remove redundant memory barrier from __call_rcu()
authorPaul E. McKenney <paul.mckenney@linaro.org>
Mon, 13 Aug 2012 23:34:12 +0000 (16:34 -0700)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Sun, 23 Sep 2012 14:42:51 +0000 (07:42 -0700)
The first memory barrier in __call_rcu() is supposed to order any
updates done beforehand by the caller against the actual queuing
of the callback.  However, the second memory barrier (which is intended
to order incrementing the queue lengths before queuing the callback)
is also between the caller's updates and the queuing of the callback.
The second memory barrier can therefore serve both purposes.

This commit therefore removes the first memory barrier.

Signed-off-by: Paul E. McKenney <paul.mckenney@linaro.org>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
Reviewed-by: Josh Triplett <josh@joshtriplett.org>
kernel/rcutree.c

index 98f275296c6d80d7cb4cad25acf6fb76f8408e59..ba4f4b4c23822f7fab4d219e4f6d33a1cb8d47ae 100644 (file)
@@ -1922,8 +1922,6 @@ __call_rcu(struct rcu_head *head, void (*func)(struct rcu_head *rcu),
        head->func = func;
        head->next = NULL;
 
-       smp_mb(); /* Ensure RCU update seen before callback registry. */
-
        /*
         * Opportunistically note grace-period endings and beginnings.
         * Note that we might see a beginning right after we see an