diff --git a/kernel/sched/topology.c b/kernel/sched/topology.c index 684fa6f50aa595acec69e90984d4f9e98e038bb4..0048aec9186c123135b478ca523b2b6927c8afc7 100644 --- a/kernel/sched/topology.c +++ b/kernel/sched/topology.c @@ -1765,7 +1765,13 @@ int sched_cluster_handler(struct ctl_table *table, int write, ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos); if (!ret && write) { if (oldval != sysctl_sched_cluster) { + /* + * Here may have raced with partition_sched_domains_locked, + * it needs to be protected with sched_domains_mutex. + */ + mutex_lock(&sched_domains_mutex); set_sched_cluster(); + mutex_unlock(&sched_domains_mutex); arch_rebuild_cpu_topology(); } }