|
@@ -2110,6 +2110,8 @@ static void rcu_cleanup_after_idle(int cpu)
|
|
|
*/
|
|
|
static void rcu_prepare_for_idle(int cpu)
|
|
|
{
|
|
|
+ struct timer_list *tp;
|
|
|
+
|
|
|
/*
|
|
|
* If this is an idle re-entry, for example, due to use of
|
|
|
* RCU_NONIDLE() or the new idle-loop tracing API within the idle
|
|
@@ -2121,9 +2123,10 @@ static void rcu_prepare_for_idle(int cpu)
|
|
|
if (!per_cpu(rcu_idle_first_pass, cpu) &&
|
|
|
(per_cpu(rcu_nonlazy_posted, cpu) ==
|
|
|
per_cpu(rcu_nonlazy_posted_snap, cpu))) {
|
|
|
- if (rcu_cpu_has_callbacks(cpu))
|
|
|
- mod_timer(&per_cpu(rcu_idle_gp_timer, cpu),
|
|
|
- per_cpu(rcu_idle_gp_timer_expires, cpu));
|
|
|
+ if (rcu_cpu_has_callbacks(cpu)) {
|
|
|
+ tp = &per_cpu(rcu_idle_gp_timer, cpu);
|
|
|
+ mod_timer_pinned(tp, per_cpu(rcu_idle_gp_timer_expires, cpu));
|
|
|
+ }
|
|
|
return;
|
|
|
}
|
|
|
per_cpu(rcu_idle_first_pass, cpu) = 0;
|
|
@@ -2167,8 +2170,8 @@ static void rcu_prepare_for_idle(int cpu)
|
|
|
else
|
|
|
per_cpu(rcu_idle_gp_timer_expires, cpu) =
|
|
|
jiffies + RCU_IDLE_LAZY_GP_DELAY;
|
|
|
- mod_timer(&per_cpu(rcu_idle_gp_timer, cpu),
|
|
|
- per_cpu(rcu_idle_gp_timer_expires, cpu));
|
|
|
+ tp = &per_cpu(rcu_idle_gp_timer, cpu);
|
|
|
+ mod_timer_pinned(tp, per_cpu(rcu_idle_gp_timer_expires, cpu));
|
|
|
per_cpu(rcu_nonlazy_posted_snap, cpu) =
|
|
|
per_cpu(rcu_nonlazy_posted, cpu);
|
|
|
return; /* Nothing more to do immediately. */
|