rcu: ignore offline CPUs in last non-dyntick-idle CPU check
authorLai Jiangshan <laijs@cn.fujitsu.com>
Tue, 30 Mar 2010 10:40:36 +0000 (18:40 +0800)
committerPaul E. McKenney <paulmck@linux.vnet.ibm.com>
Mon, 10 May 2010 18:08:31 +0000 (11:08 -0700)
Offline CPUs are not in nohz_cpu_mask, but can be ignored when checking
for the last non-dyntick-idle CPU.  This patch therefore only checks
online CPUs for not being dyntick idle, allowing fast entry into
full-system dyntick-idle state even when there are some offline CPUs.

Signed-off-by: Lai Jiangshan <laijs@cn.fujitsu.com>
Signed-off-by: Paul E. McKenney <paulmck@linux.vnet.ibm.com>
kernel/rcutree_plugin.h

index 79b53bd..687c4e9 100644 (file)
@@ -1016,7 +1016,7 @@ int rcu_needs_cpu(int cpu)
 
        /* Don't bother unless we are the last non-dyntick-idle CPU. */
        for_each_cpu_not(thatcpu, nohz_cpu_mask)
-               if (thatcpu != cpu) {
+               if (cpu_online(thatcpu) && thatcpu != cpu) {
                        per_cpu(rcu_dyntick_drain, cpu) = 0;
                        per_cpu(rcu_dyntick_holdoff, cpu) = jiffies - 1;
                        return rcu_needs_cpu_quick_check(cpu);