From 6778948f9de86c3cfaf36725a7c87dcff9ba247f Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 08:20:59 +0000 Subject: [PATCH] kernel_5.10 no rt --- kernel/kernel/sched/rt.c | 81 +++++++++------------------------------- 1 files changed, 18 insertions(+), 63 deletions(-) diff --git a/kernel/kernel/sched/rt.c b/kernel/kernel/sched/rt.c index 15ac20b..651f578 100644 --- a/kernel/kernel/sched/rt.c +++ b/kernel/kernel/sched/rt.c @@ -272,7 +272,7 @@ static inline bool need_pull_rt_task(struct rq *rq, struct task_struct *prev) { /* Try to pull RT tasks here if we lower this rq's prio */ - return rq->online && rq->rt.highest_prio.curr > prev->prio; + return rq->rt.highest_prio.curr > prev->prio; } static inline int rt_overloaded(struct rq *rq) @@ -1761,7 +1761,7 @@ static int pick_rt_task(struct rq *rq, struct task_struct *p, int cpu) { if (!task_running(rq, p) && - cpumask_test_cpu(cpu, &p->cpus_mask)) + cpumask_test_cpu(cpu, p->cpus_ptr)) return 1; return 0; @@ -1864,8 +1864,8 @@ return this_cpu; } - best_cpu = cpumask_any_and_distribute(lowest_mask, - sched_domain_span(sd)); + best_cpu = cpumask_first_and(lowest_mask, + sched_domain_span(sd)); if (best_cpu < nr_cpu_ids) { rcu_read_unlock(); return best_cpu; @@ -1882,7 +1882,7 @@ if (this_cpu != -1) return this_cpu; - cpu = cpumask_any_distribute(lowest_mask); + cpu = cpumask_any(lowest_mask); if (cpu < nr_cpu_ids) return cpu; @@ -1923,7 +1923,7 @@ * Also make sure that it wasn't scheduled on its rq. */ if (unlikely(task_rq(task) != rq || - !cpumask_test_cpu(lowest_rq->cpu, &task->cpus_mask) || + !cpumask_test_cpu(lowest_rq->cpu, task->cpus_ptr) || task_running(rq, task) || !rt_task(task) || !task_on_rq_queued(task))) { @@ -1971,7 +1971,7 @@ * running task can migrate over to a CPU that is running a task * of lesser priority. */ -static int push_rt_task(struct rq *rq, bool pull) +static int push_rt_task(struct rq *rq) { struct task_struct *next_task; struct rq *lowest_rq; @@ -1985,39 +1985,6 @@ return 0; retry: - if (is_migration_disabled(next_task)) { - struct task_struct *push_task = NULL; - int cpu; - - if (!pull) - return 0; - - trace_sched_migrate_pull_tp(next_task); - - if (rq->push_busy) - return 0; - - cpu = find_lowest_rq(rq->curr); - if (cpu == -1 || cpu == rq->cpu) - return 0; - - /* - * Given we found a CPU with lower priority than @next_task, - * therefore it should be running. However we cannot migrate it - * to this other CPU, instead attempt to push the current - * running task on this CPU away. - */ - push_task = get_push_task(rq); - if (push_task) { - raw_spin_unlock(&rq->lock); - stop_one_cpu_nowait(rq->cpu, push_cpu_stop, - push_task, &rq->push_work); - raw_spin_lock(&rq->lock); - } - - return 0; - } - if (WARN_ON(next_task == rq->curr)) return 0; @@ -2072,10 +2039,12 @@ deactivate_task(rq, next_task, 0); set_task_cpu(next_task, lowest_rq->cpu); activate_task(lowest_rq, next_task, 0); - resched_curr(lowest_rq); ret = 1; + resched_curr(lowest_rq); + double_unlock_balance(rq, lowest_rq); + out: put_task_struct(next_task); @@ -2085,7 +2054,7 @@ static void push_rt_tasks(struct rq *rq) { /* push_rt_task will return true if it moved an RT */ - while (push_rt_task(rq, false)) + while (push_rt_task(rq)) ; } @@ -2238,8 +2207,7 @@ */ if (has_pushable_tasks(rq)) { raw_spin_lock(&rq->lock); - while (push_rt_task(rq, true)) - ; + push_rt_tasks(rq); raw_spin_unlock(&rq->lock); } @@ -2264,7 +2232,7 @@ { int this_cpu = this_rq->cpu, cpu; bool resched = false; - struct task_struct *p, *push_task; + struct task_struct *p; struct rq *src_rq; int rt_overload_count = rt_overloaded(this_rq); @@ -2311,7 +2279,6 @@ * double_lock_balance, and another CPU could * alter this_rq */ - push_task = NULL; double_lock_balance(this_rq, src_rq); /* @@ -2339,15 +2306,11 @@ if (p->prio < src_rq->curr->prio) goto skip; - if (is_migration_disabled(p)) { - trace_sched_migrate_pull_tp(p); - push_task = get_push_task(src_rq); - } else { - deactivate_task(src_rq, p, 0); - set_task_cpu(p, this_cpu); - activate_task(this_rq, p, 0); - resched = true; - } + resched = true; + + deactivate_task(src_rq, p, 0); + set_task_cpu(p, this_cpu); + activate_task(this_rq, p, 0); /* * We continue with the search, just in * case there's an even higher prio task @@ -2357,13 +2320,6 @@ } skip: double_unlock_balance(this_rq, src_rq); - - if (push_task) { - raw_spin_unlock(&this_rq->lock); - stop_one_cpu_nowait(src_rq->cpu, push_cpu_stop, - push_task, &src_rq->push_work); - raw_spin_lock(&this_rq->lock); - } } if (resched) @@ -2612,7 +2568,6 @@ .rq_offline = rq_offline_rt, .task_woken = task_woken_rt, .switched_from = switched_from_rt, - .find_lock_rq = find_lock_lowest_rq, #endif .task_tick = task_tick_rt, -- Gitblit v1.6.2