|
@@ -3096,35 +3096,9 @@ void scheduler_tick(void)
|
|
rq->idle_balance = idle_cpu(cpu);
|
|
rq->idle_balance = idle_cpu(cpu);
|
|
trigger_load_balance(rq);
|
|
trigger_load_balance(rq);
|
|
#endif
|
|
#endif
|
|
- rq_last_tick_reset(rq);
|
|
|
|
}
|
|
}
|
|
|
|
|
|
#ifdef CONFIG_NO_HZ_FULL
|
|
#ifdef CONFIG_NO_HZ_FULL
|
|
-/**
|
|
|
|
- * scheduler_tick_max_deferment
|
|
|
|
- *
|
|
|
|
- * Keep at least one tick per second when a single
|
|
|
|
- * active task is running because the scheduler doesn't
|
|
|
|
- * yet completely support full dynticks environment.
|
|
|
|
- *
|
|
|
|
- * This makes sure that uptime, CFS vruntime, load
|
|
|
|
- * balancing, etc... continue to move forward, even
|
|
|
|
- * with a very low granularity.
|
|
|
|
- *
|
|
|
|
- * Return: Maximum deferment in nanoseconds.
|
|
|
|
- */
|
|
|
|
-u64 scheduler_tick_max_deferment(void)
|
|
|
|
-{
|
|
|
|
- struct rq *rq = this_rq();
|
|
|
|
- unsigned long next, now = READ_ONCE(jiffies);
|
|
|
|
-
|
|
|
|
- next = rq->last_sched_tick + HZ;
|
|
|
|
-
|
|
|
|
- if (time_before_eq(next, now))
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
- return jiffies_to_nsecs(next - now);
|
|
|
|
-}
|
|
|
|
|
|
|
|
struct tick_work {
|
|
struct tick_work {
|
|
int cpu;
|
|
int cpu;
|
|
@@ -6116,9 +6090,6 @@ void __init sched_init(void)
|
|
rq->last_load_update_tick = jiffies;
|
|
rq->last_load_update_tick = jiffies;
|
|
rq->nohz_flags = 0;
|
|
rq->nohz_flags = 0;
|
|
#endif
|
|
#endif
|
|
-#ifdef CONFIG_NO_HZ_FULL
|
|
|
|
- rq->last_sched_tick = 0;
|
|
|
|
-#endif
|
|
|
|
#endif /* CONFIG_SMP */
|
|
#endif /* CONFIG_SMP */
|
|
hrtick_rq_init(rq);
|
|
hrtick_rq_init(rq);
|
|
atomic_set(&rq->nr_iowait, 0);
|
|
atomic_set(&rq->nr_iowait, 0);
|