aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/time/tick-sched.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/time/tick-sched.c')
-rw-r--r--kernel/time/tick-sched.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 2ec7c00228f3..3bcb61b52f6c 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -186,10 +186,13 @@ static bool check_tick_dependency(atomic_t *dep)
186 return false; 186 return false;
187} 187}
188 188
189static bool can_stop_full_tick(struct tick_sched *ts) 189static bool can_stop_full_tick(int cpu, struct tick_sched *ts)
190{ 190{
191 WARN_ON_ONCE(!irqs_disabled()); 191 WARN_ON_ONCE(!irqs_disabled());
192 192
193 if (unlikely(!cpu_online(cpu)))
194 return false;
195
193 if (check_tick_dependency(&tick_dep_mask)) 196 if (check_tick_dependency(&tick_dep_mask))
194 return false; 197 return false;
195 198
@@ -843,7 +846,7 @@ static void tick_nohz_full_update_tick(struct tick_sched *ts)
843 if (!ts->tick_stopped && ts->nohz_mode == NOHZ_MODE_INACTIVE) 846 if (!ts->tick_stopped && ts->nohz_mode == NOHZ_MODE_INACTIVE)
844 return; 847 return;
845 848
846 if (can_stop_full_tick(ts)) 849 if (can_stop_full_tick(cpu, ts))
847 tick_nohz_stop_sched_tick(ts, ktime_get(), cpu); 850 tick_nohz_stop_sched_tick(ts, ktime_get(), cpu);
848 else if (ts->tick_stopped) 851 else if (ts->tick_stopped)
849 tick_nohz_restart_sched_tick(ts, ktime_get()); 852 tick_nohz_restart_sched_tick(ts, ktime_get());