From: Andrea Righi <arighi@nvidia.com>
To: Changwoo Min <changwoo@igalia.com>
Cc: tj@kernel.org, void@manifault.com, kernel-dev@igalia.com,
linux-kernel@vger.kernel.org
Subject: Re: [PATCH] sched_ext: Replace rq_lock() to raw_spin_rq_lock() in scx_ops_bypass()
Date: Wed, 8 Jan 2025 08:16:37 +0100 [thread overview]
Message-ID: <Z34mVYyvwY5ipyiA@gpd3> (raw)
In-Reply-To: <20250108025521.85877-1-changwoo@igalia.com>
Hi Changwoo,
On Wed, Jan 08, 2025 at 11:55:21AM +0900, Changwoo Min wrote:
> scx_ops_bypass() iterates all CPUs to re-enqueue all the scx tasks.
> For each CPU, it acquires a lock using rq_lock() regardless of whether
> a CPU is offline or the CPU is currently running a task in a higher
> scheduler class (e.g., deadline). The rq_lock() is supposed to be used
> for online CPUs, and the use of rq_lock() may trigger an unnecessary
> warning in rq_pin_lock(). Therefore, replace rq_lock() to
> raw_spin_rq_lock() in scx_ops_bypass().
Can we include the warning here? In this way people that are hitting the
same warning can search for it and find this fix.
Moreover, we can also add:
Fixes: 0e7ffff1b811 ("scx: Fix raciness in scx_ops_bypass()")
>
> Signed-off-by: Changwoo Min <changwoo@igalia.com>
> ---
> kernel/sched/ext.c | 7 +++----
> 1 file changed, 3 insertions(+), 4 deletions(-)
>
> diff --git a/kernel/sched/ext.c b/kernel/sched/ext.c
> index 8fe64c27004e..741398f3e730 100644
> --- a/kernel/sched/ext.c
> +++ b/kernel/sched/ext.c
> @@ -4803,10 +4803,9 @@ static void scx_ops_bypass(bool bypass)
> */
> for_each_possible_cpu(cpu) {
> struct rq *rq = cpu_rq(cpu);
> - struct rq_flags rf;
> struct task_struct *p, *n;
>
> - rq_lock(rq, &rf);
> + raw_spin_rq_lock(rq);
>
> if (bypass) {
> WARN_ON_ONCE(rq->scx.flags & SCX_RQ_BYPASSING);
> @@ -4822,7 +4821,7 @@ static void scx_ops_bypass(bool bypass)
> * sees scx_rq_bypassing() before moving tasks to SCX.
> */
> if (!scx_enabled()) {
> - rq_unlock(rq, &rf);
> + raw_spin_rq_unlock(rq);
> continue;
> }
>
> @@ -4842,7 +4841,7 @@ static void scx_ops_bypass(bool bypass)
> sched_enq_and_set_task(&ctx);
> }
Maybe we can also do this here since we're already holding the rq lock and
irqs are disabled:
/* resched to restore ticks and idle state */
if (cpu == smp_processor_id() || cpu_online(cpu))
resched_curr(rq);
>
> - rq_unlock(rq, &rf);
> + raw_spin_rq_unlock(rq);
>
And remove the following:
> /* resched to restore ticks and idle state */
> resched_cpu(cpu);
Thanks,
-Andrea
next prev parent reply other threads:[~2025-01-08 7:16 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-08 2:55 [PATCH] sched_ext: Replace rq_lock() to raw_spin_rq_lock() in scx_ops_bypass() Changwoo Min
2025-01-08 7:16 ` Andrea Righi [this message]
2025-01-08 8:10 ` Changwoo Min
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=Z34mVYyvwY5ipyiA@gpd3 \
--to=arighi@nvidia.com \
--cc=changwoo@igalia.com \
--cc=kernel-dev@igalia.com \
--cc=linux-kernel@vger.kernel.org \
--cc=tj@kernel.org \
--cc=void@manifault.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.