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