mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Waiman Long <longman@redhat.com>
To: Prateek Sood <prsood@codeaurora.org>,
	peterz@infradead.org, tj@kernel.org, lizefan@huawei.com,
	mingo@kernel.org, boqun.feng@gmail.com, tglx@linutronix.de
Cc: cgroups@vger.kernel.org, sramana@codeaurora.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH] cgroup/cpuset: remove circular dependency deadlock
Date: Thu, 26 Oct 2017 10:05:12 -0400	[thread overview]
Message-ID: <dc80ad9d-5b3d-b991-76c8-35630bc139c5@redhat.com> (raw)
In-Reply-To: <1509018722-30359-1-git-send-email-prsood@codeaurora.org>

On 10/26/2017 07:52 AM, Prateek Sood wrote:
> Remove circular dependency deadlock in a scenario where hotplug of CPU is
> being done while there is updation in cgroup and cpuset triggered from
> userspace.
>
> Process A => kthreadd => Process B => Process C => Process A
>
> Process A
> cpu_subsys_offline();
>   cpu_down();
>     _cpu_down();
>       percpu_down_write(&cpu_hotplug_lock); //held
>       cpuhp_invoke_callback();
>         workqueue_offline_cpu();
>           wq_update_unbound_numa();
>             kthread_create_on_node();
>               wake_up_process();  //wakeup kthreadd
>           flush_work();
>           wait_for_completion();
>
> kthreadd
> kthreadd();
>   kernel_thread();
>     do_fork();
>       copy_process();
>         percpu_down_read(&cgroup_threadgroup_rwsem);
>           __rwsem_down_read_failed_common(); //waiting
>
> Process B
> kernfs_fop_write();
>   cgroup_file_write();
>     cgroup_procs_write();
>       percpu_down_write(&cgroup_threadgroup_rwsem); //held
>       cgroup_attach_task();
>         cgroup_migrate();
>           cgroup_migrate_execute();
>             cpuset_can_attach();
>               mutex_lock(&cpuset_mutex); //waiting
>
> Process C
> kernfs_fop_write();
>   cgroup_file_write();
>     cpuset_write_resmask();
>       mutex_lock(&cpuset_mutex); //held
>       update_cpumask();
>         update_cpumasks_hier();
>           rebuild_sched_domains_locked();
>             get_online_cpus();
>               percpu_down_read(&cpu_hotplug_lock); //waiting
>
> Eliminating deadlock by reversing the locking order for cpuset_mutex and
> cpu_hotplug_lock.

General comments:

Please add a version number of your patch. I have seen multiple versions
of this patch and have lost track how many are there as there is no
version number information.  In addition, there are changes beyond just
swapping the lock order and they are not documented in this change log.
I would like to see you discuss about those additional changes here as well.

>  void rebuild_sched_domains(void)
>  {
> +	cpus_read_lock();
>  	mutex_lock(&cpuset_mutex);
> -	rebuild_sched_domains_locked();
> +	rebuild_sched_domains_cpuslocked();
>  	mutex_unlock(&cpuset_mutex);
> +	cpus_read_unlock();
>  }

I saw a lot of instances where cpus_read_lock() and mutex_lock() come
together. Maybe some new lock/unlock helper functions may help.

> @@ -2356,25 +2354,29 @@ static void cpuset_hotplug_workfn(struct work_struct *work)
>  	}
>  
>  	/* rebuild sched domains if cpus_allowed has changed */
> -	if (cpus_updated || force_rebuild) {
> -		force_rebuild = false;
> -		rebuild_sched_domains();
> +	if (cpus_updated) {
> +		if (use_cpu_hp_lock)
> +			rebuild_sched_domains();
> +		else {
> +			/* When called during cpu hotplug cpu_hotplug_lock
> +			 * is held by the calling thread, not
> +			 * not cpuhp_thread_fun
> +			 */

??? The comment is not clear.

Cheers,
Longman

  reply	other threads:[~2017-10-26 14:05 UTC|newest]

Thread overview: 29+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-07 13:56 Prateek Sood
2017-09-07 17:45 ` Peter Zijlstra
2017-09-08  2:13   ` Prateek Sood
2017-09-07 17:51 ` Peter Zijlstra
2017-10-09 13:27   ` Prateek Sood
2017-10-11  9:48     ` Peter Zijlstra
2017-10-25  8:39       ` Prateek Sood
2017-10-25  9:30         ` Peter Zijlstra
2017-10-26 11:52           ` Prateek Sood
2017-10-26 14:05             ` Waiman Long [this message]
2017-10-27  8:03               ` Prateek Sood
2017-10-30  7:16                 ` [PATCH v2] " Prateek Sood
2017-11-06  4:01                   ` Prateek Sood
2017-11-15 10:26                   ` Prateek Sood
2017-11-15 10:37                     ` Peter Zijlstra
2017-11-15 14:20                       ` [PATCH v3 0/2] Invert cpu_hotplug_lock and cpuset_mutex locking order Prateek Sood
2017-11-15 14:20                         ` [PATCH v3 1/2] cgroup/cpuset: remove circular dependency deadlock Prateek Sood
2017-11-15 14:20                         ` [PATCH v3 2/2] cpuset: Make cpuset hotplug synchronous Prateek Sood
2017-11-27 16:48                         ` [PATCH v3 0/2] Invert cpu_hotplug_lock and cpuset_mutex locking order Tejun Heo
2017-11-15 17:05                       ` [PATCH v2] cgroup/cpuset: remove circular dependency deadlock Tejun Heo
2017-11-15 17:18                         ` Prateek Sood
  -- strict thread matches above, loose matches on Subject: below --
2017-09-07  6:04 [PATCH] " Prateek Sood
2017-09-07  7:28 ` Peter Zijlstra
2017-09-07  8:56   ` Boqun Feng
2017-09-07  9:07     ` Prateek Sood
2017-09-07  9:05   ` Prateek Sood
2017-09-06 11:48 Prateek Sood
2017-09-06 12:56 ` Waiman Long
2017-09-06 14:23   ` Prateek Sood

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=dc80ad9d-5b3d-b991-76c8-35630bc139c5@redhat.com \
    --to=longman@redhat.com \
    --cc=boqun.feng@gmail.com \
    --cc=cgroups@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lizefan@huawei.com \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=prsood@codeaurora.org \
    --cc=sramana@codeaurora.org \
    --cc=tglx@linutronix.de \
    --cc=tj@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®