Hi, On 09/11/24 21:50, Waiman Long wrote: > Since commit ff0ce721ec21 ("cgroup/cpuset: Eliminate unncessary > sched domains rebuilds in hotplug"), there is only one > rebuild_sched_domains_locked() call per hotplug operation. However, > writing to the various cpuset control files may still casue more than > one rebuild_sched_domains_locked() call to happen in some cases. > > Juri had found that two rebuild_sched_domains_locked() calls in > update_prstate(), one from update_cpumasks_hier() and another one from > update_partition_sd_lb() could cause cpuset partition to be created > with null total_bw for DL tasks. IOW, DL tasks may not be scheduled > correctly in such a partition. > > A sample command sequence that can reproduce null total_bw is as > follows. > > # echo Y >/sys/kernel/debug/sched/verbose > # echo +cpuset >/sys/fs/cgroup/cgroup.subtree_control > # mkdir /sys/fs/cgroup/test > # echo 0-7 > /sys/fs/cgroup/test/cpuset.cpus > # echo 6-7 > /sys/fs/cgroup/test/cpuset.cpus.exclusive > # echo root >/sys/fs/cgroup/test/cpuset.cpus.partition > > Fix this double rebuild_sched_domains_locked() calls problem > by replacing existing calls with cpuset_force_rebuild() except > the rebuild_sched_domains_cpuslocked() call at the end of > cpuset_handle_hotplug(). Checking of the force_sd_rebuild flag is > now done at the end of cpuset_write_resmask() and update_prstate() > to determine if rebuild_sched_domains_locked() should be called or not. > > The cpuset v1 code can still call rebuild_sched_domains_locked() > directly as double rebuild_sched_domains_locked() calls is not possible. > > Reported-by: Juri Lelli <juri.lelli@xxxxxxxxxx> > Closes: https://lore.kernel.org/lkml/ZyuUcJDPBln1BK1Y@xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/ > Signed-off-by: Waiman Long <longman@xxxxxxxxxx> This indeed works for me and fixes things with the test above (on v2). Tested-by: Juri Lelli <juri.lelli@xxxxxxxxxx> Thanks! Juri