diff options
-rw-r--r-- | kernel/sched/core.c | 13 |
1 files changed, 10 insertions, 3 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index ec1b7a036cc2..e6fe5e28aa96 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1655,18 +1655,23 @@ static inline void mark_task_starting(struct task_struct *p) p->ravg.flags |= PREV_WINDOW_CONTRIB; } +static int update_alignment; + static inline void set_window_start(struct rq *rq) { int cpu = cpu_of(rq); struct rq *sync_rq = cpu_rq(sync_cpu); + if (cpu == sync_cpu && !update_alignment) { + sched_init_jiffy = get_jiffies_64(); + sched_clock_at_init_jiffy = sched_clock(); + } + if (rq->window_start || !sched_enable_hmp) return; if (cpu == sync_cpu) { - rq->window_start = sched_clock(); - sched_init_jiffy = get_jiffies_64(); - sched_clock_at_init_jiffy = rq->window_start; + rq->window_start = sched_clock_at_init_jiffy; } else { raw_spin_unlock(&rq->lock); double_rq_lock(rq, sync_rq); @@ -1778,6 +1783,8 @@ int sched_set_window(u64 window_start, unsigned int window_size) (window_size * TICK_NSEC < MIN_SCHED_RAVG_WINDOW)) return -EINVAL; + update_alignment = 1; + local_irq_save(flags); now = get_jiffies_64(); |