]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
sched_ext: Fix rq lock state in hotplug ops
authorAndrea Righi <arighi@nvidia.com>
Mon, 28 Apr 2025 21:43:20 +0000 (23:43 +0200)
committerTejun Heo <tj@kernel.org>
Tue, 29 Apr 2025 18:01:32 +0000 (08:01 -1000)
The ops.cpu_online() and ops.cpu_offline() callbacks incorrectly assume
that the rq involved in the operation is locked, which is not the case
during hotplug, triggering the following warning:

  WARNING: CPU: 1 PID: 20 at kernel/sched/sched.h:1504 handle_hotplug+0x280/0x340

Fix by not tracking the target rq as locked in the context of
ops.cpu_online() and ops.cpu_offline().

Fixes: 18853ba782bef ("sched_ext: Track currently locked rq")
Reported-by: Tejun Heo <tj@kernel.org>
Signed-off-by: Andrea Righi <arighi@nvidia.com>
Tested-by: Changwoo Min <changwoo@igalia.com>
Signed-off-by: Tejun Heo <tj@kernel.org>
kernel/sched/ext.c

index dddb0af36f8daff964422cba3a5976324fe1b1f6..4e37b40ce280cb017e38d20ae6673a85d4ba0952 100644 (file)
@@ -3477,9 +3477,9 @@ static void handle_hotplug(struct rq *rq, bool online)
                scx_idle_update_selcpu_topology(&scx_ops);
 
        if (online && SCX_HAS_OP(cpu_online))
-               SCX_CALL_OP(SCX_KF_UNLOCKED, cpu_online, rq, cpu);
+               SCX_CALL_OP(SCX_KF_UNLOCKED, cpu_online, NULL, cpu);
        else if (!online && SCX_HAS_OP(cpu_offline))
-               SCX_CALL_OP(SCX_KF_UNLOCKED, cpu_offline, rq, cpu);
+               SCX_CALL_OP(SCX_KF_UNLOCKED, cpu_offline, NULL, cpu);
        else
                scx_ops_exit(SCX_ECODE_ACT_RESTART | SCX_ECODE_RSN_HOTPLUG,
                             "cpu %d going %s, exiting scheduler", cpu,