diff options
Diffstat (limited to 'kernel/rcutree_plugin.h')
| -rw-r--r-- | kernel/rcutree_plugin.h | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/kernel/rcutree_plugin.h b/kernel/rcutree_plugin.h index 464ad2cdee00..79b53bda8943 100644 --- a/kernel/rcutree_plugin.h +++ b/kernel/rcutree_plugin.h | |||
| @@ -1010,6 +1010,10 @@ int rcu_needs_cpu(int cpu) | |||
| 1010 | int c = 0; | 1010 | int c = 0; |
| 1011 | int thatcpu; | 1011 | int thatcpu; |
| 1012 | 1012 | ||
| 1013 | /* Check for being in the holdoff period. */ | ||
| 1014 | if (per_cpu(rcu_dyntick_holdoff, cpu) == jiffies) | ||
| 1015 | return rcu_needs_cpu_quick_check(cpu); | ||
| 1016 | |||
| 1013 | /* Don't bother unless we are the last non-dyntick-idle CPU. */ | 1017 | /* Don't bother unless we are the last non-dyntick-idle CPU. */ |
| 1014 | for_each_cpu_not(thatcpu, nohz_cpu_mask) | 1018 | for_each_cpu_not(thatcpu, nohz_cpu_mask) |
| 1015 | if (thatcpu != cpu) { | 1019 | if (thatcpu != cpu) { |
| @@ -1041,10 +1045,8 @@ int rcu_needs_cpu(int cpu) | |||
| 1041 | } | 1045 | } |
| 1042 | 1046 | ||
| 1043 | /* If RCU callbacks are still pending, RCU still needs this CPU. */ | 1047 | /* If RCU callbacks are still pending, RCU still needs this CPU. */ |
| 1044 | if (c) { | 1048 | if (c) |
| 1045 | raise_softirq(RCU_SOFTIRQ); | 1049 | raise_softirq(RCU_SOFTIRQ); |
| 1046 | per_cpu(rcu_dyntick_holdoff, cpu) = jiffies; | ||
| 1047 | } | ||
| 1048 | return c; | 1050 | return c; |
| 1049 | } | 1051 | } |
| 1050 | 1052 | ||
