mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Yuri Andriaccio <yurand2000@gmail.com>
To: Ingo Molnar <mingo@redhat.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Juri Lelli <juri.lelli@redhat.com>,
	Vincent Guittot <vincent.guittot@linaro.org>,
	Dietmar Eggemann <dietmar.eggemann@arm.com>,
	Steven Rostedt <rostedt@goodmis.org>,
	Ben Segall <bsegall@google.com>, Mel Gorman <mgorman@suse.de>,
	Valentin Schneider <vschneid@redhat.com>
Cc: linux-kernel@vger.kernel.org,
	Luca Abeni <luca.abeni@santannapisa.it>,
	Yuri Andriaccio <yuri.andriaccio@santannapisa.it>
Subject: [RFC PATCH v4 28/28] [DEBUG] sched/rt: Add debug BUG_ONs in migration code.
Date: Mon,  1 Dec 2025 13:42:01 +0100	[thread overview]
Message-ID: <20251201124205.11169-29-yurand2000@gmail.com> (raw)
In-Reply-To: <20251201124205.11169-1-yurand2000@gmail.com>

Add debug BUG_ONs in group specific migration functions.
Can be safely added after all the migration patches.

These are extra asserts which are only useful to debug the kernel code and
are not meant to be part of the final patchset.

Signed-off-by: Yuri Andriaccio <yurand2000@gmail.com>
---
 kernel/sched/rt.c | 25 +++++++++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/kernel/sched/rt.c b/kernel/sched/rt.c
index 435d147aa5..1a777298f9 100644
--- a/kernel/sched/rt.c
+++ b/kernel/sched/rt.c
@@ -349,6 +349,9 @@ static void rt_queue_push_from_group(struct rt_rq *rt_rq)
 	struct rq *rq = served_rq_of_rt_rq(rt_rq);
 	struct rq *global_rq = cpu_rq(rq->cpu);

+	BUG_ON(rt_rq == NULL);
+	BUG_ON(rq == global_rq);
+
 	if (global_rq->rq_to_push_from)
 		return;

@@ -366,6 +369,10 @@ static void rt_queue_pull_to_group(struct rt_rq *rt_rq)
 	struct rq *global_rq = cpu_rq(rq->cpu);
 	struct sched_dl_entity *dl_se = dl_group_of(rt_rq);

+	BUG_ON(rt_rq == NULL);
+	BUG_ON(!is_dl_group(rt_rq));
+	BUG_ON(rq == global_rq);
+
 	if (dl_se->dl_throttled || global_rq->rq_to_pull_to)
 		return;

@@ -1393,6 +1400,8 @@ static struct rq *find_lock_lowest_rq(struct task_struct *task, struct rq *rq)
  */
 static int push_rt_task(struct rq *rq, bool pull)
 {
+	BUG_ON(is_dl_group(&rq->rt));
+
 	struct task_struct *next_task;
 	struct rq *lowest_rq;
 	int ret = 0;
@@ -1689,6 +1698,8 @@ void rto_push_irq_work_func(struct irq_work *work)

 static void pull_rt_task(struct rq *this_rq)
 {
+	BUG_ON(is_dl_group(&this_rq->rt));
+
 	int this_cpu = this_rq->cpu, cpu;
 	bool resched = false;
 	struct task_struct *p, *push_task;
@@ -1813,6 +1824,8 @@ static int group_find_lowest_rt_rq(struct task_struct *task, struct rt_rq *task_
 	int prio, lowest_prio;
 	int cpu, this_cpu = smp_processor_id();

+	BUG_ON(task->sched_task_group != task_rt_rq->tg);
+
 	if (task->nr_cpus_allowed == 1)
 		return -1; /* No other targets possible */

@@ -1915,6 +1928,8 @@ static struct rt_rq *group_find_lock_lowest_rt_rq(struct task_struct *task, stru
 	struct sched_dl_entity *lowest_dl_se;
 	int tries, cpu;

+	BUG_ON(task->sched_task_group != rt_rq->tg);
+
 	for (tries = 0; tries < RT_MAX_TRIES; tries++) {
 		cpu = group_find_lowest_rt_rq(task, rt_rq);

@@ -1971,6 +1986,8 @@ static struct rt_rq *group_find_lock_lowest_rt_rq(struct task_struct *task, stru

 static int group_push_rt_task(struct rt_rq *rt_rq, bool pull)
 {
+	BUG_ON(!is_dl_group(rt_rq));
+
 	struct rq *rq = rq_of_rt_rq(rt_rq);
 	struct task_struct *next_task;
 	struct rq *lowest_rq;
@@ -2090,6 +2107,8 @@ static int group_push_rt_task(struct rt_rq *rt_rq, bool pull)

 static void group_pull_rt_task(struct rt_rq *this_rt_rq)
 {
+	BUG_ON(!is_dl_group(this_rt_rq));
+
 	struct rq *this_rq = rq_of_rt_rq(this_rt_rq);
 	int this_cpu = this_rq->cpu, cpu;
 	bool resched = false;
@@ -2202,6 +2221,9 @@ static void group_push_rt_tasks_callback(struct rq *global_rq)
 {
 	struct rt_rq *rt_rq = &global_rq->rq_to_push_from->rt;

+	BUG_ON(global_rq->rq_to_push_from == NULL);
+	BUG_ON(served_rq_of_rt_rq(rt_rq) == global_rq);
+
 	if ((rt_rq->rt_nr_running > 1) ||
 	    (dl_group_of(rt_rq)->dl_throttled == 1)) {

@@ -2216,6 +2238,9 @@ static void group_pull_rt_task_callback(struct rq *global_rq)
 {
 	struct rt_rq *rt_rq = &global_rq->rq_to_pull_to->rt;

+	BUG_ON(global_rq->rq_to_pull_to == NULL);
+	BUG_ON(served_rq_of_rt_rq(rt_rq) == global_rq);
+
 	group_pull_rt_task(rt_rq);
 	global_rq->rq_to_pull_to = NULL;
 }
--
2.51.0


      parent reply	other threads:[~2025-12-01 12:42 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-01 12:41 [RFC PATCH v4 00/28] Hierarchical Constant Bandwidth Server Yuri Andriaccio
2025-12-01 12:41 ` [RFC PATCH v4 01/28] sched/deadline: Do not access dl_se->rq directly Yuri Andriaccio
2026-01-14 11:03   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 02/28] sched/deadline: Distinct between dl_rq and my_q Yuri Andriaccio
2026-01-14 16:10   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 03/28] sched/rt: Pass an rt_rq instead of an rq where needed Yuri Andriaccio
2026-01-15 14:33   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 04/28] sched/rt: Move some functions from rt.c to sched.h Yuri Andriaccio
2026-01-15 14:40   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 05/28] sched/rt: Disable RT_GROUP_SCHED Yuri Andriaccio
2026-01-15 15:56   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 06/28] sched/rt: Remove rq field in struct rt_rq Yuri Andriaccio
2026-01-15 16:12   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 07/28] sched/rt: Introduce HCBS specific structs in task_group Yuri Andriaccio
2026-01-16 13:50   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 08/28] sched/core: Initialize HCBS specific structures Yuri Andriaccio
2026-01-16 14:09   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 09/28] sched/deadline: Add dl_init_tg Yuri Andriaccio
2026-01-16 15:02   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 10/28] sched/rt: Add {alloc/free}_rt_sched_group Yuri Andriaccio
2026-01-19 13:49   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 11/28] sched/deadline: Account rt-cgroups bandwidth in deadline tasks schedulability tests Yuri Andriaccio
2026-01-19 14:00   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 12/28] sched/rt: Implement dl-server operations for rt-cgroups Yuri Andriaccio
2026-01-19 15:01   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 13/28] sched/rt: Update task event callbacks for HCBS scheduling Yuri Andriaccio
2026-01-21  9:46   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 14/28] sched/rt: Update rt-cgroup schedulability checks Yuri Andriaccio
2026-01-21 10:21   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 15/28] sched/rt: Allow zeroing the runtime of the root control group Yuri Andriaccio
2026-01-21 10:32   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 16/28] sched/rt: Remove old RT_GROUP_SCHED data structures Yuri Andriaccio
2026-01-21 10:41   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 17/28] sched/core: Cgroup v2 support Yuri Andriaccio
2026-01-21 10:51   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 18/28] sched/rt: Remove support for cgroups-v1 Yuri Andriaccio
2026-01-21 11:08   ` Juri Lelli
2025-12-01 12:41 ` [RFC PATCH v4 19/28] sched/deadline: Allow deeper hierarchies of RT cgroups Yuri Andriaccio
2025-12-01 12:41 ` [RFC PATCH v4 20/28] sched/rt: Add rt-cgroup migration Yuri Andriaccio
2025-12-01 12:41 ` [RFC PATCH v4 21/28] sched/rt: Add HCBS migration related checks and function calls Yuri Andriaccio
2025-12-01 12:41 ` [RFC PATCH v4 22/28] sched/deadline: Introduce dl_server_try_pull_f Yuri Andriaccio
2025-12-01 12:41 ` [RFC PATCH v4 23/28] sched/deadline: Fix HCBS migrations on server stop Yuri Andriaccio
2025-12-01 12:41 ` [RFC PATCH v4 24/28] sched/core: Execute enqueued balance callbacks when changing allowed CPUs Yuri Andriaccio
2025-12-01 12:41 ` [RFC PATCH v4 25/28] sched/core: Execute enqueued balance callbacks when migrating task betweeen cgroups Yuri Andriaccio
2025-12-01 12:41 ` [RFC PATCH v4 26/28] Documentation: Update documentation for real-time cgroups Yuri Andriaccio
2025-12-01 12:42 ` [RFC PATCH v4 27/28] [DEBUG] sched/rt: Add debug BUG_ONs for pre-migration code Yuri Andriaccio
2025-12-01 12:42 ` Yuri Andriaccio [this message]

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=20251201124205.11169-29-yurand2000@gmail.com \
    --to=yurand2000@gmail.com \
    --cc=bsegall@google.com \
    --cc=dietmar.eggemann@arm.com \
    --cc=juri.lelli@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=luca.abeni@santannapisa.it \
    --cc=mgorman@suse.de \
    --cc=mingo@redhat.com \
    --cc=peterz@infradead.org \
    --cc=rostedt@goodmis.org \
    --cc=vincent.guittot@linaro.org \
    --cc=vschneid@redhat.com \
    --cc=yuri.andriaccio@santannapisa.it \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome