From: Ingo Molnar <mingo@kernel.org>
To: linux-kernel@vger.kernel.org
Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>,
Linus Torvalds <torvalds@linux-foundation.org>,
Peter Zijlstra <peterz@infradead.org>,
Shrikanth Hegde <sshegde@linux.ibm.com>,
Thomas Gleixner <tglx@linutronix.de>,
Valentin Schneider <vschneid@redhat.com>,
Steven Rostedt <rostedt@goodmis.org>,
Mel Gorman <mgorman@suse.de>,
Vincent Guittot <vincent.guittot@linaro.org>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Ingo Molnar <mingo@kernel.org>,
Juri Lelli <juri.lelli@redhat.com>
Subject: [PATCH 28/43] sched/smp: Use the SMP version of the RT scheduling class
Date: Wed, 28 May 2025 10:09:09 +0200 [thread overview]
Message-ID: <20250528080924.2273858-29-mingo@kernel.org> (raw)
In-Reply-To: <20250528080924.2273858-1-mingo@kernel.org>
Simplify the scheduler by making formerly SMP-only primitives and data
structures unconditional in the RT policies scheduler.
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Dietmar Eggemann <dietmar.eggemann@arm.com>
Cc: Juri Lelli <juri.lelli@redhat.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Mel Gorman <mgorman@suse.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Shrikanth Hegde <sshegde@linux.ibm.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Valentin Schneider <vschneid@redhat.com>
Cc: Vincent Guittot <vincent.guittot@linaro.org>
---
kernel/sched/rt.c | 72 ----------------------------------------------------
kernel/sched/sched.h | 2 --
2 files changed, 74 deletions(-)
diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 0cd801458eef..7119f4c8aa68 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -75,12 +75,10 @@ void init_rt_rq(struct rt_rq *rt_rq)
/* delimiter for bitsearch: */
__set_bit(MAX_RT_PRIO, array->bitmap);
-#if defined CONFIG_SMP
rt_rq->highest_prio.curr = MAX_RT_PRIO-1;
rt_rq->highest_prio.next = MAX_RT_PRIO-1;
rt_rq->overloaded = 0;
plist_head_init(&rt_rq->pushable_tasks);
-#endif /* CONFIG_SMP */
/* We start is dequeued state, because no RT tasks are queued */
rt_rq->rt_queued = 0;
@@ -329,8 +327,6 @@ int alloc_rt_sched_group(struct task_group *tg, struct task_group *parent)
}
#endif /* !CONFIG_RT_GROUP_SCHED */
-#ifdef CONFIG_SMP
-
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 */
@@ -430,21 +426,6 @@ static void dequeue_pushable_task(struct rq *rq, struct task_struct *p)
}
}
-#else /* !CONFIG_SMP: */
-
-static inline void enqueue_pushable_task(struct rq *rq, struct task_struct *p)
-{
-}
-
-static inline void dequeue_pushable_task(struct rq *rq, struct task_struct *p)
-{
-}
-
-static inline void rt_queue_push_tasks(struct rq *rq)
-{
-}
-#endif /* !CONFIG_SMP */
-
static void enqueue_top_rt_rq(struct rt_rq *rt_rq);
static void dequeue_top_rt_rq(struct rt_rq *rt_rq, unsigned int count);
@@ -594,17 +575,10 @@ static int rt_se_boosted(struct sched_rt_entity *rt_se)
return p->prio != p->normal_prio;
}
-#ifdef CONFIG_SMP
static inline const struct cpumask *sched_rt_period_mask(void)
{
return this_rq()->rd->span;
}
-#else
-static inline const struct cpumask *sched_rt_period_mask(void)
-{
- return cpu_online_mask;
-}
-#endif
static inline
struct rt_rq *sched_rt_period_rt_rq(struct rt_bandwidth *rt_b, int cpu)
@@ -625,7 +599,6 @@ bool sched_rt_bandwidth_account(struct rt_rq *rt_rq)
rt_rq->rt_time < rt_b->rt_runtime);
}
-#ifdef CONFIG_SMP
/*
* We ran out of runtime, see if we can borrow some from our neighbours.
*/
@@ -798,9 +771,6 @@ static void balance_runtime(struct rt_rq *rt_rq)
raw_spin_lock(&rt_rq->rt_runtime_lock);
}
}
-#else /* !CONFIG_SMP: */
-static inline void balance_runtime(struct rt_rq *rt_rq) {}
-#endif /* !CONFIG_SMP */
static int do_sched_rt_period_timer(struct rt_bandwidth *rt_b, int overrun)
{
@@ -977,10 +947,8 @@ struct rt_rq *sched_rt_period_rt_rq(struct rt_bandwidth *rt_b, int cpu)
return &cpu_rq(cpu)->rt;
}
-#ifdef CONFIG_SMP
static void __enable_runtime(struct rq *rq) { }
static void __disable_runtime(struct rq *rq) { }
-#endif
#endif /* !CONFIG_RT_GROUP_SCHED */
@@ -1075,8 +1043,6 @@ enqueue_top_rt_rq(struct rt_rq *rt_rq)
cpufreq_update_util(rq, 0);
}
-#if defined CONFIG_SMP
-
static void
inc_rt_prio_smp(struct rt_rq *rt_rq, int prio, int prev_prio)
{
@@ -1107,16 +1073,6 @@ dec_rt_prio_smp(struct rt_rq *rt_rq, int prio, int prev_prio)
cpupri_set(&rq->rd->cpupri, rq->cpu, rt_rq->highest_prio.curr);
}
-#else /* !CONFIG_SMP: */
-
-static inline
-void inc_rt_prio_smp(struct rt_rq *rt_rq, int prio, int prev_prio) {}
-static inline
-void dec_rt_prio_smp(struct rt_rq *rt_rq, int prio, int prev_prio) {}
-
-#endif /* !CONFIG_SMP */
-
-#if defined CONFIG_SMP || defined CONFIG_RT_GROUP_SCHED
static void
inc_rt_prio(struct rt_rq *rt_rq, int prio)
{
@@ -1155,13 +1111,6 @@ dec_rt_prio(struct rt_rq *rt_rq, int prio)
dec_rt_prio_smp(rt_rq, prio, prev_prio);
}
-#else /* !(CONFIG_SMP || CONFIG_RT_GROUP_SCHED): */
-
-static inline void inc_rt_prio(struct rt_rq *rt_rq, int prio) {}
-static inline void dec_rt_prio(struct rt_rq *rt_rq, int prio) {}
-
-#endif /* !(CONFIG_SMP || CONFIG_RT_GROUP_SCHED) */
-
#ifdef CONFIG_RT_GROUP_SCHED
static void
@@ -1538,7 +1487,6 @@ static void yield_task_rt(struct rq *rq)
requeue_task_rt(rq, rq->curr, 0);
}
-#ifdef CONFIG_SMP
static int find_lowest_rq(struct task_struct *task);
static int
@@ -1653,7 +1601,6 @@ static int balance_rt(struct rq *rq, struct task_struct *p, struct rq_flags *rf)
return sched_stop_runnable(rq) || sched_dl_runnable(rq) || sched_rt_runnable(rq);
}
-#endif /* CONFIG_SMP */
/*
* Preempt the current task with a newly woken task if needed:
@@ -1667,7 +1614,6 @@ static void wakeup_preempt_rt(struct rq *rq, struct task_struct *p, int flags)
return;
}
-#ifdef CONFIG_SMP
/*
* If:
*
@@ -1682,7 +1628,6 @@ static void wakeup_preempt_rt(struct rq *rq, struct task_struct *p, int flags)
*/
if (p->prio == donor->prio && !test_tsk_need_resched(rq->curr))
check_preempt_equal_prio(rq, p);
-#endif /* CONFIG_SMP */
}
static inline void set_next_task_rt(struct rq *rq, struct task_struct *p, bool first)
@@ -1776,8 +1721,6 @@ static void put_prev_task_rt(struct rq *rq, struct task_struct *p, struct task_s
enqueue_pushable_task(rq, p);
}
-#ifdef CONFIG_SMP
-
/* Only try algorithms three times */
#define RT_MAX_TRIES 3
@@ -2451,11 +2394,6 @@ void __init init_sched_rt_class(void)
GFP_KERNEL, cpu_to_node(i));
}
}
-#else /* !CONFIG_SMP: */
-void __init init_sched_rt_class(void)
-{
-}
-#endif /* !CONFIG_SMP */
/*
* When switching a task to RT, we may overload the runqueue
@@ -2479,10 +2417,8 @@ static void switched_to_rt(struct rq *rq, struct task_struct *p)
* then see if we can move to another run queue.
*/
if (task_on_rq_queued(p)) {
-#ifdef CONFIG_SMP
if (p->nr_cpus_allowed > 1 && rq->rt.overloaded)
rt_queue_push_tasks(rq);
-#endif /* CONFIG_SMP */
if (p->prio < rq->donor->prio && cpu_online(cpu_of(rq)))
resched_curr(rq);
}
@@ -2499,7 +2435,6 @@ prio_changed_rt(struct rq *rq, struct task_struct *p, int oldprio)
return;
if (task_current_donor(rq, p)) {
-#ifdef CONFIG_SMP
/*
* If our priority decreases while running, we
* may need to pull tasks to this runqueue.
@@ -2513,11 +2448,6 @@ prio_changed_rt(struct rq *rq, struct task_struct *p, int oldprio)
*/
if (p->prio > rq->rt.highest_prio.curr)
resched_curr(rq);
-#else /* !CONFIG_SMP: */
- /* For UP simply resched on drop of prio */
- if (oldprio < p->prio)
- resched_curr(rq);
-#endif /* !CONFIG_SMP */
} else {
/*
* This task is not running, but if it is
@@ -2638,7 +2568,6 @@ DEFINE_SCHED_CLASS(rt) = {
.put_prev_task = put_prev_task_rt,
.set_next_task = set_next_task_rt,
-#ifdef CONFIG_SMP
.balance = balance_rt,
.select_task_rq = select_task_rq_rt,
.set_cpus_allowed = set_cpus_allowed_common,
@@ -2647,7 +2576,6 @@ DEFINE_SCHED_CLASS(rt) = {
.task_woken = task_woken_rt,
.switched_from = switched_from_rt,
.find_lock_rq = find_lock_lowest_rq,
-#endif /* !CONFIG_SMP */
.task_tick = task_tick_rt,
diff --git a/kernel/sched/sched.h b/kernel/sched/sched.h
index de130ffa42b2..7c67e1ccc0ae 100644
--- a/kernel/sched/sched.h
+++ b/kernel/sched/sched.h
@@ -791,11 +791,9 @@ struct rt_rq {
int curr; /* highest queued rt task prio */
int next; /* next highest */
} highest_prio;
-#ifdef CONFIG_SMP
bool overloaded;
struct plist_head pushable_tasks;
-#endif /* CONFIG_SMP */
int rt_queued;
#ifdef CONFIG_RT_GROUP_SCHED
--
2.45.2
next prev parent reply other threads:[~2025-05-28 8:11 UTC|newest]
Thread overview: 95+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-05-28 8:08 [PATCH 00/43] sched: Use the SMP scheduler on UP too Ingo Molnar
2025-05-28 8:08 ` [PATCH 01/43] sched: Clean up and standardize #if/#else/#endif markers in sched/autogroup.[ch] Ingo Molnar
2025-05-30 2:29 ` Sohil Mehta
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 02/43] sched: Clean up and standardize #if/#else/#endif markers in sched/clock.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 03/43] sched: Clean up and standardize #if/#else/#endif markers in sched/core.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 04/43] sched: Clean up and standardize #if/#else/#endif markers in sched/cpufreq_schedutil.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 05/43] sched: Clean up and standardize #if/#else/#endif markers in sched/cpupri.h Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 06/43] sched: Clean up and standardize #if/#else/#endif markers in sched/cputime.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 07/43] sched: Clean up and standardize #if/#else/#endif markers in sched/deadline.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 08/43] sched: Clean up and standardize #if/#else/#endif markers in sched/debug.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 09/43] sched: Clean up and standardize #if/#else/#endif markers in sched/fair.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 10/43] sched: Clean up and standardize #if/#else/#endif markers in sched/idle.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 11/43] sched: Clean up and standardize #if/#else/#endif markers in sched/loadavg.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 12/43] sched: Clean up and standardize #if/#else/#endif markers in sched/pelt.[ch] Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 13/43] sched: Clean up and standardize #if/#else/#endif markers in sched/psi.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 14/43] sched: Clean up and standardize #if/#else/#endif markers in sched/rt.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 15/43] sched: Clean up and standardize #if/#else/#endif markers in sched/sched.h Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 16/43] sched: Clean up and standardize #if/#else/#endif markers in sched/stats.[ch] Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 17/43] sched: Clean up and standardize #if/#else/#endif markers in sched/syscalls.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:08 ` [PATCH 18/43] sched: Clean up and standardize #if/#else/#endif markers in sched/topology.c Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 19/43] sched/smp: Always define sched_domains_mutex_lock()/unlock(), def_root_domain and sched_domains_mutex Ingo Molnar
2025-05-28 8:14 ` [PATCH 20/43] sched/smp: Make SMP unconditional Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] sched/smp: Always define sched_domains_mutex_lock()/unlock(), def_root_domain and sched_domains_mutex tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 20/43] sched/smp: Make SMP unconditional Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 21/43] sched/smp: Always define is_percpu_thread() and scheduler_ipi() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 22/43] sched/smp: Always define rq->hrtick_csd Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 23/43] sched/smp: Use the SMP version of try_to_wake_up() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 24/43] sched/smp: Use the SMP version of __task_needs_rq_lock() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 25/43] sched/smp: Use the SMP version of wake_up_new_task() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 26/43] sched/smp: Use the SMP version of sched_exec() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 27/43] sched/smp: Use the SMP version of idle_thread_set_boot_cpu() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` Ingo Molnar [this message]
2025-06-13 7:37 ` [tip: sched/core] sched/smp: Use the SMP version of the RT scheduling class tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 29/43] sched/smp: Use the SMP version of the deadline " Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 30/43] sched/smp: Use the SMP version of scheduler debugging data Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 31/43] sched/smp: Use the SMP version of schedstats Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 32/43] sched/smp: Use the SMP version of the scheduler syscalls Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 33/43] sched/smp: Use the SMP version of sched_update_asym_prefer_cpu() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 34/43] sched/smp: Use the SMP version of the idle scheduling class Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 35/43] sched/smp: Use the SMP version of the stop-CPU " Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 36/43] sched/smp: Use the SMP version of cpu_of() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 37/43] sched/smp: Use the SMP version of is_migration_disabled() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 38/43] sched/smp: Use the SMP version of rq_pin_lock() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 39/43] sched/smp: Use the SMP version of task_on_cpu() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 40/43] sched/smp: Use the SMP version of WF_ and SD_ flag sanity checks Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 41/43] sched/smp: Use the SMP version of ENQUEUE_MIGRATED Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 42/43] sched/smp: Use the SMP version of add_nr_running() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:09 ` [PATCH 43/43] sched/smp: Use the SMP version of double_rq_clock_clear_update() Ingo Molnar
2025-06-13 7:37 ` [tip: sched/core] " tip-bot2 for Ingo Molnar
2025-05-28 8:58 ` [PATCH 00/43] sched: Use the SMP scheduler on UP too Peter Zijlstra
2025-05-28 14:00 ` Steven Rostedt
2025-05-28 16:10 ` Peter Zijlstra
2025-05-28 16:21 ` Steven Rostedt
2025-05-29 6:42 ` Ingo Molnar
2025-05-30 9:34 ` [PATCH] sched: Break dependency loop between sched.h and preempt.h Herbert Xu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250528080924.2273858-29-mingo@kernel.org \
--to=mingo@kernel.org \
--cc=bigeasy@linutronix.de \
--cc=dietmar.eggemann@arm.com \
--cc=juri.lelli@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mgorman@suse.de \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=sshegde@linux.ibm.com \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.