From: Paul E. McKenney Date: Thu, 21 Jun 2012 16:54:10 +0000 (-0700) Subject: rcu: Prevent offline CPUs from executing RCU core code X-Git-Tag: next-20120907~29^2~21 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=a5cdc1c841e92f421ac5ccb50105aa8c36e2bb0e;p=karo-tx-linux.git rcu: Prevent offline CPUs from executing RCU core code Earlier versions of RCU invoked the RCU core from the CPU_DYING notifier in order to note a quiescent state for the outgoing CPU. Because the CPU is marked "offline" during the execution of the CPU_DYING notifiers, the RCU core had to tolerate being invoked from an offline CPU. However, commit b1420f1c (Make rcu_barrier() less disruptive) left only tracing code in the CPU_DYING notifier, so the RCU core need no longer execute on offline CPUs. This commit therefore enforces this restriction. Signed-off-by: Paul E. McKenney Signed-off-by: Paul E. McKenney Reviewed-by: Josh Triplett --- diff --git a/kernel/rcutree.c b/kernel/rcutree.c index 300aba692692..84a6f55fa145 100644 --- a/kernel/rcutree.c +++ b/kernel/rcutree.c @@ -1892,6 +1892,8 @@ static void rcu_process_callbacks(struct softirq_action *unused) { struct rcu_state *rsp; + if (cpu_is_offline(smp_processor_id())) + return; trace_rcu_utilization("Start RCU core"); for_each_rcu_flavor(rsp) __rcu_process_callbacks(rsp);