From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752055AbdA3DiT (ORCPT ); Sun, 29 Jan 2017 22:38:19 -0500 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]:33573 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751976AbdA3DiC (ORCPT ); Sun, 29 Jan 2017 22:38:02 -0500 From: Anshuman Khandual To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: mhocko@suse.com, vbabka@suse.cz, mgorman@suse.de, minchan@kernel.org, aneesh.kumar@linux.vnet.ibm.com, bsingharora@gmail.com, srikar@linux.vnet.ibm.com, haren@linux.vnet.ibm.com, jglisse@redhat.com, dave.hansen@intel.com, dan.j.williams@intel.com Subject: [RFC V2 06/12] mm: Exclude CDM nodes from task->mems_allowed and root cpuset Date: Mon, 30 Jan 2017 09:05:47 +0530 X-Mailer: git-send-email 2.9.3 In-Reply-To: <20170130033602.12275-1-khandual@linux.vnet.ibm.com> References: <20170130033602.12275-1-khandual@linux.vnet.ibm.com> X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 17013003-0008-0000-0000-000001050267 X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17013003-0009-0000-0000-000008F7DD1C Message-Id: <20170130033602.12275-7-khandual@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-01-30_02:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1612050000 definitions=main-1701300038 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Task struct's mems_allowed element decides the final nodemask from which memory can be allocated in the task context irrespective any applicable memory policy. CDM nodes should not be used for user allocations, its one of the overall requirements of it's isolation. So they should not be part of any task's mems_allowed nodemask. System RAM nodemask is used instead of node_states[N_MEMORY] nodemask during mems_allowed initialization and it's update during memory hotlugs. Signed-off-by: Anshuman Khandual --- kernel/cpuset.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/kernel/cpuset.c b/kernel/cpuset.c index be75f3f..4e1df26 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c @@ -364,9 +364,11 @@ static void guarantee_online_cpus(struct cpuset *cs, struct cpumask *pmask) */ static void guarantee_online_mems(struct cpuset *cs, nodemask_t *pmask) { - while (!nodes_intersects(cs->effective_mems, node_states[N_MEMORY])) + nodemask_t ram_nodes = ram_nodemask(); + + while (!nodes_intersects(cs->effective_mems, ram_nodes)) cs = parent_cs(cs); - nodes_and(*pmask, cs->effective_mems, node_states[N_MEMORY]); + nodes_and(*pmask, cs->effective_mems, ram_nodes); } /* @@ -2303,7 +2305,7 @@ static void cpuset_hotplug_workfn(struct work_struct *work) /* fetch the available cpus/mems and find out which changed how */ cpumask_copy(&new_cpus, cpu_active_mask); - new_mems = node_states[N_MEMORY]; + new_mems = ram_nodemask(); cpus_updated = !cpumask_equal(top_cpuset.effective_cpus, &new_cpus); mems_updated = !nodes_equal(top_cpuset.effective_mems, new_mems); @@ -2395,11 +2397,11 @@ static struct notifier_block cpuset_track_online_nodes_nb = { void __init cpuset_init_smp(void) { cpumask_copy(top_cpuset.cpus_allowed, cpu_active_mask); - top_cpuset.mems_allowed = node_states[N_MEMORY]; + top_cpuset.mems_allowed = ram_nodemask(); top_cpuset.old_mems_allowed = top_cpuset.mems_allowed; cpumask_copy(top_cpuset.effective_cpus, cpu_active_mask); - top_cpuset.effective_mems = node_states[N_MEMORY]; + top_cpuset.effective_mems = ram_nodemask(); register_hotmemory_notifier(&cpuset_track_online_nodes_nb); -- 2.9.3