sched_ext: Track currently locked rq
authorAndrea Righi <arighi@nvidia.com>
Tue, 22 Apr 2025 08:26:32 +0000 (10:26 +0200)
committerTejun Heo <tj@kernel.org>
Tue, 22 Apr 2025 19:27:50 +0000 (09:27 -1000)
commit18853ba782bef65fc81ef2b3370382e5b479c5eb
tree9501674581d46536f3c412fcf747a86737533ffc
parentbc08b15b54b8aadbc8a8f413271c07a3f4bead87
sched_ext: Track currently locked rq

Some kfuncs provided by sched_ext may need to operate on a struct rq,
but they can be invoked from various contexts, specifically, different
scx callbacks.

While some of these callbacks are invoked with a particular rq already
locked, others are not. This makes it impossible for a kfunc to reliably
determine whether it's safe to access a given rq, triggering potential
bugs or unsafe behaviors, see for example [1].

To address this, track the currently locked rq whenever a sched_ext
callback is invoked via SCX_CALL_OP*().

This allows kfuncs that need to operate on an arbitrary rq to retrieve
the currently locked one and apply the appropriate action as needed.

[1] https://lore.kernel.org/lkml/20250325140021.73570-1-arighi@nvidia.com/

Suggested-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrea Righi <arighi@nvidia.com>
Acked-by: Changwoo Min <changwoo@igalia.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext.c
kernel/sched/ext_idle.c