Skip to content

Commit e22f910

Browse files
Yang YingliangPeter Zijlstra
authored andcommitted
sched/smt: Fix unbalance sched_smt_present dec/inc
I got the following warn report while doing stress test: jump label: negative count! WARNING: CPU: 3 PID: 38 at kernel/jump_label.c:263 static_key_slow_try_dec+0x9d/0xb0 Call Trace: <TASK> __static_key_slow_dec_cpuslocked+0x16/0x70 sched_cpu_deactivate+0x26e/0x2a0 cpuhp_invoke_callback+0x3ad/0x10d0 cpuhp_thread_fun+0x3f5/0x680 smpboot_thread_fn+0x56d/0x8d0 kthread+0x309/0x400 ret_from_fork+0x41/0x70 ret_from_fork_asm+0x1b/0x30 </TASK> Because when cpuset_cpu_inactive() fails in sched_cpu_deactivate(), the cpu offline failed, but sched_smt_present is decremented before calling sched_cpu_deactivate(), it leads to unbalanced dec/inc, so fix it by incrementing sched_smt_present in the error path. Fixes: c5511d0 ("sched/smt: Make sched_smt_present track topology") Cc: [email protected] Signed-off-by: Yang Yingliang <[email protected]> Signed-off-by: Peter Zijlstra (Intel) <[email protected]> Reviewed-by: Chen Yu <[email protected]> Reviewed-by: Tim Chen <[email protected]> Link: https://lore.kernel.org/r/[email protected]
1 parent 31b164e commit e22f910

File tree

1 file changed

+1
-0
lines changed

1 file changed

+1
-0
lines changed

kernel/sched/core.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8009,6 +8009,7 @@ int sched_cpu_deactivate(unsigned int cpu)
80098009
sched_update_numa(cpu, false);
80108010
ret = cpuset_cpu_inactive(cpu);
80118011
if (ret) {
8012+
sched_smt_present_inc(cpu);
80128013
balance_push_set(cpu, false);
80138014
set_cpu_active(cpu, true);
80148015
sched_update_numa(cpu, true);

0 commit comments

Comments
 (0)