Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753345AbdIFLRe (ORCPT ); Wed, 6 Sep 2017 07:17:34 -0400 Received: from smtp.codeaurora.org ([198.145.29.96]:56566 "EHLO smtp.codeaurora.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752597AbdIFLRb (ORCPT ); Wed, 6 Sep 2017 07:17:31 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 smtp.codeaurora.org EEAC7602B3 Authentication-Results: pdx-caf-mail.web.codeaurora.org; dmarc=none (p=none dis=none) header.from=codeaurora.org Authentication-Results: pdx-caf-mail.web.codeaurora.org; spf=none smtp.mailfrom=prsood@codeaurora.org Subject: Re: [PATCH] Workqueue lockup: Circular dependency in threads To: Tejun Heo References: <1504101538-20075-1-git-send-email-prsood@codeaurora.org> <20170905132242.GA1774378@devbig577.frc2.facebook.com> Cc: lizefan@huawei.com, cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, sramana@codeaurora.org, mingo@kernel.org, longman@redhat.com, apkm@linux-foundation.org From: Prateek Sood Message-ID: <6de44880-c641-5e89-ff07-68ba206b692c@codeaurora.org> Date: Wed, 6 Sep 2017 16:47:25 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.7.0 MIME-Version: 1.0 In-Reply-To: <20170905132242.GA1774378@devbig577.frc2.facebook.com> Content-Type: text/plain; charset=windows-1252 Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1745 Lines: 52 On 09/05/2017 06:52 PM, Tejun Heo wrote: > Hello, > > On Thu, Aug 31, 2017 at 06:43:56PM +0530, Prateek Sood wrote: >>> 6) cpuset_mutex is acquired by task init:1 and is waiting for cpuhotplug lock. > > Yeah, this is the problematic one. > >>> We can reorder the sequence of locks as in the below diff to avoid this >>> deadlock. But I am looking for inputs/better solution to fix this deadlock. >>> >>> --- >>> diff --git a/kernel/cpuset.c b/kernel/cpuset.c >>> /** >>> * update_tasks_cpumask - Update the cpumasks of tasks in the cpuset. >>> * @cs: the cpuset in which each task's cpus_allowed mask needs to be changed >>> @@ -930,7 +946,7 @@ static void update_cpumasks_hier(struct cpuset *cs, struct cpumask *new_cpus) >>> rcu_read_unlock(); >>> >>> if (need_rebuild_sched_domains) >>> - rebuild_sched_domains_locked(); >>> + rebuild_sched_domains_unlocked()(without taking cpuhotplug.lock) >>> } >>> >>> /** >>> @@ -1719,6 +1735,7 @@ static ssize_t cpuset_write_resmask(struct kernfs_open_file *of, >>> + get_online_cpus(); >>> mutex_lock(&cpuset_mutex); >>> if (!is_cpuset_online(cs)) >>> goto out_unlock; >>> @@ -1744,6 +1761,7 @@ static ssize_t cpuset_write_resmask(struct kernfs_open_file *of, >>> mutex_unlock(&cpuset_mutex); >>> + put_online_cpus(); >>> kernfs_unbreak_active_protection(of->kn); >>> css_put(&cs->css); >>> flush_workqueue(cpuset_migrate_mm_wq); >>> > > And the patch looks good to me. Can you please format the patch with > proper description and sob? > > Thanks. > Thanks for review Tejun I will send updated patch. -- Qualcomm India Private Limited, on behalf of Qualcomm Innovation Center, Inc., is a member of Code Aurora Forum, a Linux Foundation Collaborative Project