lkml.org 
[lkml]   [2022]   [Jul]   [20]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectQuery regarding deadlock involving cgroup_threadgroup_rwsem and cpu_hotplug_lock
    From
    Hello everyone,

    I am seeing a deadlock between cgroup_threadgroup_rwsem and cpu_hotplug_lock in
    5.4 kernel.

    Due to some missing drivers I don't have this test setup for latest upstream
    kernel but looking at the code the issue seems to be present in the latest
    kernel as well. If needed I can provide stack traces and other relevant info
    from the vmcore that I have got from 5.4 setup.

    The description of the problem is as follows (I am using 5.19-rc7 as reference
    below):

    __cgroup_procs_write acquires cgroup_threadgroup_rwsem via
    cgroup_procs_write_start and then invokes cgroup_attach_task. Now
    cgroup_attach_task can invoke following call chain:

    cgroup_attach_task --> cgroup_migrate --> cgroup_migrate_execute --> cpuset_attach

    Here cpuset_attach tries to take cpu_hotplug_lock.

    But by this time if some other context

    1. is already in the middle of cpu hotplug and has acquired cpu_hotplug_lock in
    _cpu_up but
    2. has not yet reached CPUHP_ONLINE state and
    3. one of the intermediate hotplug states (in my case CPUHP_AP_ONLINE_DYN ) has
    a callback which involves creation of a thread (or invocation of copy_process
    via some other path) the invoked copy_process will get blocked on
    cgroup_threadgroup_rwsem in following call chain:

    copy_process --> cgroup_can_fork --> cgroup_css_set_fork -->
    cgroup_threadgroup_change_begin


    I am looking for suggestions to fix this deadlock.

    Or if I am missing something in the above analysis and the above mention
    scenario can't happen in latest upstream kernel, then please let me know as that
    would help me in back porting relevant changes to 5.4 kernel because the issue
    definitely exists in 5.4 kernel.

    Thanks,
    -- Imran

    \
     
     \ /
      Last update: 2022-07-20 06:16    [W:8.102 / U:0.036 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site