Re: [PATCH for-4.9.y] cgroup: Fix deadlock in cpu hotplug path

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Wed, Oct 10, 2018 at 11:53:36PM +0530, Amit Pundir wrote:
> From: Prateek Sood <prsood@xxxxxxxxxxxxxx>
> 
> commit 116d2f7496c51b2e02e8e4ecdd2bdf5fb9d5a641 upstream.
> 
> Deadlock during cgroup migration from cpu hotplug path when a task T is
> being moved from source to destination cgroup.
> 
> kworker/0:0
> cpuset_hotplug_workfn()
>    cpuset_hotplug_update_tasks()
>       hotplug_update_tasks_legacy()
>         remove_tasks_in_empty_cpuset()
>           cgroup_transfer_tasks() // stuck in iterator loop
>             cgroup_migrate()
>               cgroup_migrate_add_task()
> 
> In cgroup_migrate_add_task() it checks for PF_EXITING flag of task T.
> Task T will not migrate to destination cgroup. css_task_iter_start()
> will keep pointing to task T in loop waiting for task T cg_list node
> to be removed.
> 
> Task T
> do_exit()
>   exit_signals() // sets PF_EXITING
>   exit_task_namespaces()
>     switch_task_namespaces()
>       free_nsproxy()
>         put_mnt_ns()
>           drop_collected_mounts()
>             namespace_unlock()
>               synchronize_rcu()
>                 _synchronize_rcu_expedited()
>                   schedule_work() // on cpu0 low priority worker pool
>                   wait_event() // waiting for work item to execute
> 
> Task T inserted a work item in the worklist of cpu0 low priority
> worker pool. It is waiting for expedited grace period work item
> to execute. This work item will only be executed once kworker/0:0
> complete execution of cpuset_hotplug_workfn().
> 
> kworker/0:0 ==> Task T ==>kworker/0:0
> 
> In case of PF_EXITING task being migrated from source to destination
> cgroup, migrate next available task in source cgroup.
> 
> Signed-off-by: Prateek Sood <prsood@xxxxxxxxxxxxxx>
> Signed-off-by: Tejun Heo <tj@xxxxxxxxxx>
> [AmitP: Upstream commit cherry-pick failed, so I picked the
>         backported changes from CAF/msm-4.9 tree instead:
>         https://source.codeaurora.org/quic/la/kernel/msm-4.9/commit/?id=49b74f1696417b270c89cd893ca9f37088928078]
> Signed-off-by: Amit Pundir <amit.pundir@xxxxxxxxxx>
> ---
> This patch can be cleanly applied and build tested on 4.4.y and 3.18.y
> as well but I couldn't find it in msm-4.4 and msm-3.18 trees. So this
> patch is really untested on those stable trees.
> Build tested on 4.9.131, 4.4.159 and 3.18.123 for ARCH=arm/arm64 allmodconfig.

Now applied, thanks.

greg k-h



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux