]> nv-tegra.nvidia Code Review - linux-2.6.git/blobdiff - kernel/rcutree_plugin.h
rcu: Fix holdoff for accelerated GPs for last non-dynticked CPU
[linux-2.6.git] / kernel / rcutree_plugin.h
index 464ad2cdee00a22bfbfe258853770f3bb60e3f5d..79b53bda894326838c200575c7f87e0b5f70b678 100644 (file)
@@ -1010,6 +1010,10 @@ int rcu_needs_cpu(int cpu)
        int c = 0;
        int thatcpu;
 
+       /* Check for being in the holdoff period. */
+       if (per_cpu(rcu_dyntick_holdoff, cpu) == jiffies)
+               return rcu_needs_cpu_quick_check(cpu);
+
        /* Don't bother unless we are the last non-dyntick-idle CPU. */
        for_each_cpu_not(thatcpu, nohz_cpu_mask)
                if (thatcpu != cpu) {
@@ -1041,10 +1045,8 @@ int rcu_needs_cpu(int cpu)
        }
 
        /* If RCU callbacks are still pending, RCU still needs this CPU. */
-       if (c) {
+       if (c)
                raise_softirq(RCU_SOFTIRQ);
-               per_cpu(rcu_dyntick_holdoff, cpu) = jiffies;
-       }
        return c;
 }