rcu: Avoid invoking RCU core on offline CPUs
authorPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Mon, 4 Feb 2013 20:14:24 +0000 (12:14 -0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Tue, 12 Mar 2013 21:07:37 +0000 (14:07 -0700)
Offline CPUs transition through the scheduler to the idle loop one
last time before being shut down.  This can result in RCU raising
softirq on this CPU, which is at best useless given that the CPU's
callbacks will be offloaded at CPU_DEAD time.  This commit therefore
avoids raising softirq on offline CPUs.

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

index 157539a975df2a308f7113ad80eb440f4797ecd7..b2fc234ba1b9686981dfa65122a189c324a2c0a8 100644 (file)
@@ -2169,7 +2169,8 @@ static void invoke_rcu_callbacks(struct rcu_state *rsp, struct rcu_data *rdp)
 
 static void invoke_rcu_core(void)
 {
-       raise_softirq(RCU_SOFTIRQ);
+       if (cpu_online(smp_processor_id()))
+               raise_softirq(RCU_SOFTIRQ);
 }
 
 /*