Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp2958367imm; Mon, 28 May 2018 20:57:39 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpn/pakGV7A1bpIxFtthbVR6uSpthY0R/+PsFDQDLCcCE6oWBzCXUcTjcmH0V6jFkwKwLEk X-Received: by 2002:a63:7b1e:: with SMTP id w30-v6mr12496059pgc.249.1527566258981; Mon, 28 May 2018 20:57:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527566258; cv=none; d=google.com; s=arc-20160816; b=fGsQGE08NT3ewMJMXbMq3ZAf7ZrWfClFKQC67fwfOPTYLkLaSG/BzzIhbguP8rZy/G BnXXkc5qN/r6mT+MPK84d48u9OKhpU3YJbY6w+YLpprb/BHynU0wspK3hGqdfaZ69uFD 9Sk+q+fH4kiIByDlQr15NpLMmXOEb628PheyuZnwqEYa/+J7uqeFr1mlNxP2gb86XhGx ZnVBQvXLYcqsbDEAKWLR8DfgLb6/jPS3KFP8rvKmNMFf1Jf1WjYGLPe/AYn16f+TfSSz iJUubwWkA8cNNGDgqGjt7rqVzMMbWSu6UygVxFOTTJi5KP4mfAZTVMghXFpckZNhs8K/ 16Lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-language :content-transfer-encoding:in-reply-to:mime-version:user-agent:date :message-id:organization:from:references:cc:to:subject :arc-authentication-results; bh=uP1JVEBAIsSBT/ITG862luq2ywpUBqAeich1hqXTuhM=; b=z6NrEjudzSettO3oWeLjL7ctXM+JXng3gtJTv4o84J8mU0R04HP+LSY9f7gYo8TXze 9dSNo/iQaxvkZuauqn0v1o0xhUC0Yz05Q96MMlB3XlF+KO8eKBVr+bkXacHefCGfdmjI aWTria4W/kJNib2MCOhEep0ycdV7iKPG01OoZK6LXpwDfJoFWzUcQ13KAgNEzlGLBshR 29rcZHDkFzzq9JYTmTYk/QlnWYmowb9LyTuvukoFO4qlqcrX5aA1/zm9hy2B7iBfktPf qzAEXbz/jtN9isJIf+Egmh62GYM836s1oeuCWzDLIIivgEGL3pMcgi4sYXB/MKwoUkXn 8bXw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w16-v6si30122576plk.592.2018.05.28.20.57.23; Mon, 28 May 2018 20:57:38 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755880AbeE2AzS (ORCPT + 99 others); Mon, 28 May 2018 20:55:18 -0400 Received: from mx3-rdu2.redhat.com ([66.187.233.73]:32966 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1755808AbeE2AzO (ORCPT ); Mon, 28 May 2018 20:55:14 -0400 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id B8E5F401EF04; Tue, 29 May 2018 00:55:13 +0000 (UTC) Received: from llong.remote.csb (ovpn-121-110.rdu2.redhat.com [10.10.121.110]) by smtp.corp.redhat.com (Postfix) with ESMTP id 830092024CA1; Tue, 29 May 2018 00:55:12 +0000 (UTC) Subject: Re: [PATCH v8 2/6] cpuset: Add new v2 cpuset.sched.domain flag To: Juri Lelli Cc: Tejun Heo , Li Zefan , Johannes Weiner , Peter Zijlstra , Ingo Molnar , cgroups@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, kernel-team@fb.com, pjt@google.com, luto@amacapital.net, Mike Galbraith , torvalds@linux-foundation.org, Roman Gushchin References: <1526590545-3350-1-git-send-email-longman@redhat.com> <1526590545-3350-3-git-send-email-longman@redhat.com> <20180522125750.GA31040@localhost.localdomain> From: Waiman Long Organization: Red Hat Message-ID: <595ad976-6859-95bc-179f-88e11ba98dbf@redhat.com> Date: Mon, 28 May 2018 20:55:13 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.0 MIME-Version: 1.0 In-Reply-To: <20180522125750.GA31040@localhost.localdomain> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Language: en-US X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Tue, 29 May 2018 00:55:13 +0000 (UTC) X-Greylist: inspected by milter-greylist-4.5.16 (mx1.redhat.com [10.11.55.5]); Tue, 29 May 2018 00:55:13 +0000 (UTC) for IP:'10.11.54.4' DOMAIN:'int-mx04.intmail.prod.int.rdu2.redhat.com' HELO:'smtp.corp.redhat.com' FROM:'longman@redhat.com' RCPT:'' Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 05/22/2018 08:57 AM, Juri Lelli wrote: > Hi, > > On 17/05/18 16:55, Waiman Long wrote: > > [...] > >> /** >> + * update_isolated_cpumask - update the isolated_cpus mask of parent cpuset >> + * @cpuset: The cpuset that requests CPU isolation >> + * @oldmask: The old isolated cpumask to be removed from the parent >> + * @newmask: The new isolated cpumask to be added to the parent >> + * Return: 0 if successful, an error code otherwise >> + * >> + * Changes to the isolated CPUs are not allowed if any of CPUs changing >> + * state are in any of the child cpusets of the parent except the requesting >> + * child. >> + * >> + * If the sched_domain flag changes, either the oldmask (0=>1) or the >> + * newmask (1=>0) will be NULL. >> + * >> + * Called with cpuset_mutex held. >> + */ >> +static int update_isolated_cpumask(struct cpuset *cpuset, >> + struct cpumask *oldmask, struct cpumask *newmask) >> +{ >> + int retval; >> + int adding, deleting; >> + cpumask_var_t addmask, delmask; >> + struct cpuset *parent = parent_cs(cpuset); >> + struct cpuset *sibling; >> + struct cgroup_subsys_state *pos_css; >> + int old_count = parent->isolation_count; >> + bool dying = cpuset->css.flags & CSS_DYING; >> + >> + /* >> + * Parent must be a scheduling domain with non-empty cpus_allowed. >> + */ >> + if (!is_sched_domain(parent) || cpumask_empty(parent->cpus_allowed)) >> + return -EINVAL; >> + >> + /* >> + * The oldmask, if present, must be a subset of parent's isolated >> + * CPUs. >> + */ >> + if (oldmask && !cpumask_empty(oldmask) && (!parent->isolation_count || >> + !cpumask_subset(oldmask, parent->isolated_cpus))) { >> + WARN_ON_ONCE(1); >> + return -EINVAL; >> + } >> + >> + /* >> + * A sched_domain state change is not allowed if there are >> + * online children and the cpuset is not dying. >> + */ >> + if (!dying && (!oldmask || !newmask) && >> + css_has_online_children(&cpuset->css)) >> + return -EBUSY; >> + >> + if (!zalloc_cpumask_var(&addmask, GFP_KERNEL)) >> + return -ENOMEM; >> + if (!zalloc_cpumask_var(&delmask, GFP_KERNEL)) { >> + free_cpumask_var(addmask); >> + return -ENOMEM; >> + } >> + >> + if (!old_count) { >> + if (!zalloc_cpumask_var(&parent->isolated_cpus, GFP_KERNEL)) { >> + retval = -ENOMEM; >> + goto out; >> + } >> + old_count = 1; >> + } >> + >> + retval = -EBUSY; >> + adding = deleting = false; >> + if (newmask) >> + cpumask_copy(addmask, newmask); >> + if (oldmask) >> + deleting = cpumask_andnot(delmask, oldmask, addmask); >> + if (newmask) >> + adding = cpumask_andnot(addmask, newmask, delmask); >> + >> + if (!adding && !deleting) >> + goto out_ok; >> + >> + /* >> + * The cpus to be added must be in the parent's effective_cpus mask >> + * but not in the isolated_cpus mask. >> + */ >> + if (!cpumask_subset(addmask, parent->effective_cpus)) >> + goto out; >> + if (parent->isolation_count && >> + cpumask_intersects(parent->isolated_cpus, addmask)) >> + goto out; >> + >> + /* >> + * Check if any CPUs in addmask or delmask are in a sibling cpuset. >> + * An empty sibling cpus_allowed means it is the same as parent's >> + * effective_cpus. This checking is skipped if the cpuset is dying. >> + */ >> + if (dying) >> + goto updated_isolated_cpus; >> + >> + cpuset_for_each_child(sibling, pos_css, parent) { >> + if ((sibling == cpuset) || !(sibling->css.flags & CSS_ONLINE)) >> + continue; >> + if (cpumask_empty(sibling->cpus_allowed)) >> + goto out; >> + if (adding && >> + cpumask_intersects(sibling->cpus_allowed, addmask)) >> + goto out; >> + if (deleting && >> + cpumask_intersects(sibling->cpus_allowed, delmask)) >> + goto out; >> + } > Just got the below by echoing 1 into cpuset.sched.domain of a sibling with > "isolated" cpuset.cpus. Guess you are missing proper locking about here > above. > > --->8--- > [ 7509.905005] ============================= > [ 7509.905009] WARNING: suspicious RCU usage > [ 7509.905014] 4.17.0-rc5+ #11 Not tainted > [ 7509.905017] ----------------------------- > [ 7509.905023] /home/juri/work/kernel/linux/kernel/cgroup/cgroup.c:3826 cgroup_mutex or RCU read lock required! > [ 7509.905026] > other info that might help us debug this: The cause is missing rcu_lock/rcu_unlock in section of the code. It will be fixed in the next version. Cheers, Longman