summaryrefslogtreecommitdiff
path: root/kernel
diff options
context:
space:
mode:
Diffstat (limited to 'kernel')
-rw-r--r--kernel/sched/core.c18
1 files changed, 17 insertions, 1 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c
index 238dfe87ad80..89247c82da3c 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -1623,8 +1623,24 @@ void set_task_cpu(struct task_struct *p, unsigned int new_cpu)
p->se.nr_migrations++;
perf_event_task_migrate(p);
- if (p->state == TASK_RUNNING)
+#if defined(CONFIG_SCHED_FREQ_INPUT) || defined(CONFIG_SCHED_HMP)
+ if (p->on_rq) {
+ struct rq *src_rq = task_rq(p);
+ struct rq *dest_rq = cpu_rq(new_cpu);
+
+ p->on_rq = 0; /* Fixme */
update_task_ravg(p, task_rq(p), 0);
+ p->on_rq = 1; /* Fixme */
+ update_task_ravg(dest_rq->curr, dest_rq, 1);
+
+
+ src_rq->curr_runnable_sum -= p->ravg.sum;
+ src_rq->prev_runnable_sum -= p->ravg.prev_window;
+ dest_rq->curr_runnable_sum += p->ravg.sum;
+ dest_rq->prev_runnable_sum += p->ravg.prev_window;
+ }
+#endif
+
}
__set_task_cpu(p, new_cpu);