aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sched/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/sched/core.c')
-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 fb9764fbc537..49db434a35d0 100644
--- a/kernel/sched/core.c
+++ b/kernel/sched/core.c
@@ -4681,6 +4681,22 @@ static void calc_load_migrate(struct rq *rq)
4681 atomic_long_add(delta, &calc_load_tasks); 4681 atomic_long_add(delta, &calc_load_tasks);
4682} 4682}
4683 4683
4684static void put_prev_task_fake(struct rq *rq, struct task_struct *prev)
4685{
4686}
4687
4688static const struct sched_class fake_sched_class = {
4689 .put_prev_task = put_prev_task_fake,
4690};
4691
4692static struct task_struct fake_task = {
4693 /*
4694 * Avoid pull_{rt,dl}_task()
4695 */
4696 .prio = MAX_PRIO + 1,
4697 .sched_class = &fake_sched_class,
4698};
4699
4684/* 4700/*
4685 * Migrate all tasks from the rq, sleeping tasks will be migrated by 4701 * Migrate all tasks from the rq, sleeping tasks will be migrated by
4686 * try_to_wake_up()->select_task_rq(). 4702 * try_to_wake_up()->select_task_rq().
@@ -4721,7 +4737,7 @@ static void migrate_tasks(unsigned int dead_cpu)
4721 if (rq->nr_running == 1) 4737 if (rq->nr_running == 1)
4722 break; 4738 break;
4723 4739
4724 next = pick_next_task(rq, NULL); 4740 next = pick_next_task(rq, &fake_task);
4725 BUG_ON(!next); 4741 BUG_ON(!next);
4726 next->sched_class->put_prev_task(rq, next); 4742 next->sched_class->put_prev_task(rq, next);
4727 4743