Messages in this thread | | | Date | Tue, 12 Jul 2022 23:02:48 -0400 | Subject | Re: [PATCH] sched/schedutil: Fix deadlock between cpuset and cpu hotplug when using schedutil | From | Waiman Long <> |
| |
On 7/11/22 17:11, Steven Rostedt wrote: > On Mon, 11 Jul 2022 10:58:28 -1000 > Tejun Heo <tj@kernel.org> wrote: > >> I don't think lockdep would be able to track CPU1 -> CPU2 dependency here >> unfortunately. >> >>> AFAIU: >>> >>> >>> CPU0 CPU1 CPU2 >>> >>> // attach task to a different >>> // cpuset cgroup via sysfs >>> __acquire(cgroup_threadgroup_rwsem) >>> >>> // pring up CPU2 online >>> __acquire(cpu_hotplug_lock) >>> // wait for CPU2 to come online > Should there be some annotation here that tells lockdep that CPU1 is now > blocked on CPU2? > > Then this case would be caught by lockdep. > > -- Steve > > >>> // bringup cpu online >>> // call cpufreq_online() which tries to create sugov kthread >>> __acquire(cpu_hotplug_lock) copy_process() >>> cgroup_can_fork() >>> cgroup_css_set_fork() >>> __acquire(cgroup_threadgroup_rwsem) >>> // blocks forever // blocks forever // blocks forever
Actually, the dependency can probably be coded by calling lockdep_acquire_cpus_lock() in cpu2 (task 2) before acquiring cgroup_threadgroup_rwsem to indicate the dependency between CPU1 and CPU2 (task 1 and task 2). lockdep_release_cpus_lock() can then called after release the rwsem.
Cheers, Longman
| |