rcu: Consolidate offline-CPU callback initialization
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Fri, 16 Jan 2015 22:01:21 +0000 (14:01 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Wed, 11 Mar 2015 20:22:36 +0000 (13:22 -0700)
Currently, both rcu_cleanup_dead_cpu() and rcu_send_cbs_to_orphanage()
initialize the outgoing CPU's callback list.  However, only
rcu_cleanup_dead_cpu() invokes rcu_send_cbs_to_orphanage(), and
it does so unconditionally, which means that only one of these
initializations is required.  This commit therefore consolidates the
callback-list initialization with the rest of the callback handling in
rcu_send_cbs_to_orphanage().

Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcu/tree.c

index 48d640c..8e020c5 100644 (file)
@@ -2256,8 +2256,12 @@ rcu_send_cbs_to_orphanage(int cpu, struct rcu_state *rsp,
                rsp->orphan_donetail = rdp->nxttail[RCU_DONE_TAIL];
        }
 
-       /* Finally, initialize the rcu_data structure's list to empty.  */
+       /*
+        * Finally, initialize the rcu_data structure's list to empty and
+        * disallow further callbacks on this CPU.
+        */
        init_callback_list(rdp);
+       rdp->nxttail[RCU_NEXT_TAIL] = NULL;
 }
 
 /*
@@ -2398,9 +2402,6 @@ static void rcu_cleanup_dead_cpu(int cpu, struct rcu_state *rsp)
        WARN_ONCE(rdp->qlen != 0 || rdp->nxtlist != NULL,
                  "rcu_cleanup_dead_cpu: Callbacks on offline CPU %d: qlen=%lu, nxtlist=%p\n",
                  cpu, rdp->qlen, rdp->nxtlist);
-       init_callback_list(rdp);
-       /* Disallow further callbacks on this CPU. */
-       rdp->nxttail[RCU_NEXT_TAIL] = NULL;
        mutex_unlock(&rsp->onoff_mutex);
 }