lkml.org 
[lkml]   [2022]   [Jul]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH] sched/schedutil: Fix deadlock between cpuset and cpu hotplug when using schedutil
    From
    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

    \
     
     \ /
      Last update: 2022-07-13 05:05    [W:2.802 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site