]> www.infradead.org Git - users/jedix/linux-maple.git/commit
sched_ext: Replace rq_lock() to raw_spin_rq_lock() in scx_ops_bypass()
authorChangwoo Min <changwoo@igalia.com>
Wed, 8 Jan 2025 15:08:06 +0000 (00:08 +0900)
committerTejun Heo <tj@kernel.org>
Wed, 8 Jan 2025 16:48:53 +0000 (06:48 -1000)
commit6268d5bc10354fc2ab8d44a0cd3b042d49a0417e
treec1d83d066b362faff2bd532122743a480e2cf120
parent30dd3b13f9de612ef7328ccffcf1a07d0d40ab51
sched_ext: Replace rq_lock() to raw_spin_rq_lock() in scx_ops_bypass()

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().

Without this change, we observe the following warning:

===== START =====
[    6.615205] rq->balance_callback && rq->balance_callback != &balance_push_callback
[    6.615208] WARNING: CPU: 2 PID: 0 at kernel/sched/sched.h:1730 __schedule+0x1130/0x1c90
=====  END  =====

Fixes: 0e7ffff1b811 ("scx: Fix raciness in scx_ops_bypass()")
Signed-off-by: Changwoo Min <changwoo@igalia.com>
Acked-by: Andrea Righi <arighi@nvidia.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext.c