|
@@ -2133,7 +2133,8 @@ static void rcu_prepare_for_idle(int cpu)
|
|
/* First time through, initialize the counter. */
|
|
/* First time through, initialize the counter. */
|
|
per_cpu(rcu_dyntick_drain, cpu) = RCU_IDLE_FLUSHES;
|
|
per_cpu(rcu_dyntick_drain, cpu) = RCU_IDLE_FLUSHES;
|
|
} else if (per_cpu(rcu_dyntick_drain, cpu) <= RCU_IDLE_OPT_FLUSHES &&
|
|
} else if (per_cpu(rcu_dyntick_drain, cpu) <= RCU_IDLE_OPT_FLUSHES &&
|
|
- !rcu_pending(cpu)) {
|
|
|
|
|
|
+ !rcu_pending(cpu) &&
|
|
|
|
+ !local_softirq_pending()) {
|
|
/* Can we go dyntick-idle despite still having callbacks? */
|
|
/* Can we go dyntick-idle despite still having callbacks? */
|
|
trace_rcu_prep_idle("Dyntick with callbacks");
|
|
trace_rcu_prep_idle("Dyntick with callbacks");
|
|
per_cpu(rcu_dyntick_drain, cpu) = 0;
|
|
per_cpu(rcu_dyntick_drain, cpu) = 0;
|