Commit d9e446d
sched_ext: Replace rq_lock() to raw_spin_rq_lock() in scx_ops_bypass()
[ Upstream commit 6268d5b ]
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: 0e7ffff ("scx: Fix raciness in scx_ops_bypass()")
Signed-off-by: Changwoo Min <[email protected]>
Acked-by: Andrea Righi <[email protected]>
Signed-off-by: Tejun Heo <[email protected]>
Signed-off-by: Sasha Levin <[email protected]>1 parent 5b80f2f commit d9e446d
1 file changed
+6
-6
lines changed| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4348 | 4348 | | |
4349 | 4349 | | |
4350 | 4350 | | |
4351 | | - | |
4352 | 4351 | | |
4353 | 4352 | | |
4354 | | - | |
| 4353 | + | |
4355 | 4354 | | |
4356 | 4355 | | |
4357 | 4356 | | |
| |||
4367 | 4366 | | |
4368 | 4367 | | |
4369 | 4368 | | |
4370 | | - | |
| 4369 | + | |
4371 | 4370 | | |
4372 | 4371 | | |
4373 | 4372 | | |
| |||
4387 | 4386 | | |
4388 | 4387 | | |
4389 | 4388 | | |
4390 | | - | |
4391 | | - | |
4392 | 4389 | | |
4393 | | - | |
| 4390 | + | |
| 4391 | + | |
| 4392 | + | |
| 4393 | + | |
4394 | 4394 | | |
4395 | 4395 | | |
4396 | 4396 | | |
| |||
0 commit comments