From: Anshuman Khandual <khandual@linux.vnet.ibm.com> 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] cpuset: Enable changing of top_cpuset's mems_allowed nodemask Date: Tue, 31 Jan 2017 19:52:37 +0530 [thread overview] Message-ID: <20170131142237.27097-1-khandual@linux.vnet.ibm.com> (raw) In-Reply-To: <20170130203003.dm2ydoi3e6cbbwcj@suse.de> At present, top_cpuset.mems_allowed is same as node_states[N_MEMORY] and it cannot be changed at the runtime. Maximum possible node_states[N_MEMORY] also gets reflected in top_cpuset.effective_mems interface. It prevents some one from removing or restricting memory placement which will be applicable system wide on a given memory node through cpuset mechanism which might be limiting. This solves the problem by enabling update_nodemask() function to accept changes to top_cpuset.mems_allowed as well. Once changed, it also updates the value of top_cpuset.effective_mems. Updates all it's task's mems_allowed nodemask as well. It calls cpuset_inc() to make sure cpuset is accounted for in the buddy allocator through cpusets_enabled() check. Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com> --- Tested for * Enforcement of changed top_cpuset.mems_allowed * Global mems_allowed cannot be changed till there are other cpusets present underneath the top root cpuset. I guess it is expected. kernel/cpuset.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/kernel/cpuset.c b/kernel/cpuset.c index b308888..e8c105a 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c @@ -1210,15 +1210,6 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs, int retval; /* - * top_cpuset.mems_allowed tracks node_stats[N_MEMORY]; - * it's read-only - */ - if (cs == &top_cpuset) { - retval = -EACCES; - goto done; - } - - /* * An empty mems_allowed is ok iff there are no tasks in the cpuset. * Since nodelist_parse() fails on an empty mask, we special case * that parsing. The validate_change() call ensures that cpusets @@ -1232,7 +1223,7 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs, goto done; if (!nodes_subset(trialcs->mems_allowed, - top_cpuset.mems_allowed)) { + node_states[N_MEMORY])) { retval = -EINVAL; goto done; } @@ -1250,6 +1241,16 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs, cs->mems_allowed = trialcs->mems_allowed; spin_unlock_irq(&callback_lock); + if (cs == &top_cpuset) { + spin_lock_irq(&callback_lock); + cs->effective_mems = trialcs->mems_allowed; + spin_unlock_irq(&callback_lock); + + update_tasks_nodemask(cs); + cpuset_inc(); + goto done; + } + /* use trialcs->mems_allowed as a temp variable */ update_nodemasks_hier(cs, &trialcs->mems_allowed); done: -- 1.8.3.1
WARNING: multiple messages have this Message-ID (diff)
From: Anshuman Khandual <khandual@linux.vnet.ibm.com> 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] cpuset: Enable changing of top_cpuset's mems_allowed nodemask Date: Tue, 31 Jan 2017 19:52:37 +0530 [thread overview] Message-ID: <20170131142237.27097-1-khandual@linux.vnet.ibm.com> (raw) In-Reply-To: <20170130203003.dm2ydoi3e6cbbwcj@suse.de> At present, top_cpuset.mems_allowed is same as node_states[N_MEMORY] and it cannot be changed at the runtime. Maximum possible node_states[N_MEMORY] also gets reflected in top_cpuset.effective_mems interface. It prevents some one from removing or restricting memory placement which will be applicable system wide on a given memory node through cpuset mechanism which might be limiting. This solves the problem by enabling update_nodemask() function to accept changes to top_cpuset.mems_allowed as well. Once changed, it also updates the value of top_cpuset.effective_mems. Updates all it's task's mems_allowed nodemask as well. It calls cpuset_inc() to make sure cpuset is accounted for in the buddy allocator through cpusets_enabled() check. Signed-off-by: Anshuman Khandual <khandual@linux.vnet.ibm.com> --- Tested for * Enforcement of changed top_cpuset.mems_allowed * Global mems_allowed cannot be changed till there are other cpusets present underneath the top root cpuset. I guess it is expected. kernel/cpuset.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/kernel/cpuset.c b/kernel/cpuset.c index b308888..e8c105a 100644 --- a/kernel/cpuset.c +++ b/kernel/cpuset.c @@ -1210,15 +1210,6 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs, int retval; /* - * top_cpuset.mems_allowed tracks node_stats[N_MEMORY]; - * it's read-only - */ - if (cs == &top_cpuset) { - retval = -EACCES; - goto done; - } - - /* * An empty mems_allowed is ok iff there are no tasks in the cpuset. * Since nodelist_parse() fails on an empty mask, we special case * that parsing. The validate_change() call ensures that cpusets @@ -1232,7 +1223,7 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs, goto done; if (!nodes_subset(trialcs->mems_allowed, - top_cpuset.mems_allowed)) { + node_states[N_MEMORY])) { retval = -EINVAL; goto done; } @@ -1250,6 +1241,16 @@ static int update_nodemask(struct cpuset *cs, struct cpuset *trialcs, cs->mems_allowed = trialcs->mems_allowed; spin_unlock_irq(&callback_lock); + if (cs == &top_cpuset) { + spin_lock_irq(&callback_lock); + cs->effective_mems = trialcs->mems_allowed; + spin_unlock_irq(&callback_lock); + + update_tasks_nodemask(cs); + cpuset_inc(); + goto done; + } + /* use trialcs->mems_allowed as a temp variable */ update_nodemasks_hier(cs, &trialcs->mems_allowed); done: -- 1.8.3.1 -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@kvack.org. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
next prev parent reply other threads:[~2017-01-31 14:23 UTC|newest] Thread overview: 116+ messages / expand[flat|nested] mbox.gz Atom feed top 2017-01-30 3:35 [RFC V2 00/12] Define coherent device memory node Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [RFC V2 01/12] mm: Define coherent device memory (CDM) node Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [RFC V2 02/12] mm: Isolate HugeTLB allocations away from CDM nodes Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 17:19 ` Dave Hansen 2017-01-30 17:19 ` Dave Hansen 2017-01-31 1:03 ` Anshuman Khandual 2017-01-31 1:03 ` Anshuman Khandual 2017-01-31 1:37 ` Dave Hansen 2017-01-31 1:37 ` Dave Hansen 2017-02-01 13:59 ` Anshuman Khandual 2017-02-01 13:59 ` Anshuman Khandual 2017-02-01 19:01 ` Dave Hansen 2017-02-01 19:01 ` Dave Hansen 2017-01-30 3:35 ` [RFC V2 03/12] mm: Change generic FALLBACK zonelist creation process Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 17:34 ` Dave Hansen 2017-01-30 17:34 ` Dave Hansen 2017-01-31 1:36 ` Anshuman Khandual 2017-01-31 1:36 ` Anshuman Khandual 2017-01-31 1:57 ` Dave Hansen 2017-01-31 1:57 ` Dave Hansen 2017-01-31 7:25 ` John Hubbard 2017-01-31 7:25 ` John Hubbard 2017-01-31 18:04 ` Dave Hansen 2017-01-31 18:04 ` Dave Hansen 2017-01-31 19:14 ` David Nellans 2017-01-31 19:14 ` David Nellans 2017-02-01 6:56 ` Anshuman Khandual 2017-02-01 6:56 ` Anshuman Khandual 2017-02-01 6:46 ` Anshuman Khandual 2017-02-01 6:46 ` Anshuman Khandual 2017-02-01 6:40 ` Anshuman Khandual 2017-02-01 6:40 ` Anshuman Khandual 2017-01-30 3:35 ` [RFC V2 04/12] mm: Change mbind(MPOL_BIND) implementation for CDM nodes Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [RFC V2 05/12] cpuset: Add cpuset_inc() inside cpuset_init() Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 17:36 ` Dave Hansen 2017-01-30 17:36 ` Dave Hansen 2017-01-30 20:30 ` Mel Gorman 2017-01-30 20:30 ` Mel Gorman 2017-01-31 14:22 ` Anshuman Khandual [this message] 2017-01-31 14:22 ` [RFC] cpuset: Enable changing of top_cpuset's mems_allowed nodemask Anshuman Khandual 2017-01-31 16:00 ` Mel Gorman 2017-01-31 16:00 ` Mel Gorman 2017-02-01 7:31 ` Anshuman Khandual 2017-02-01 7:31 ` Anshuman Khandual 2017-02-01 8:53 ` Michal Hocko 2017-02-01 8:53 ` Michal Hocko 2017-02-01 9:18 ` Mel Gorman 2017-02-01 9:18 ` Mel Gorman 2017-01-31 14:36 ` [RFC V2 05/12] cpuset: Add cpuset_inc() inside cpuset_init() Vlastimil Babka 2017-01-31 14:36 ` Vlastimil Babka 2017-01-31 15:30 ` Anshuman Khandual 2017-01-31 15:30 ` Anshuman Khandual 2017-01-30 3:35 ` [RFC V2 06/12] mm: Exclude CDM nodes from task->mems_allowed and root cpuset Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [RFC V2 07/12] mm: Ignore cpuset enforcement when allocation flag has __GFP_THISNODE Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [RFC V2 08/12] mm: Add new VMA flag VM_CDM Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 18:52 ` Jerome Glisse 2017-01-30 18:52 ` Jerome Glisse 2017-01-31 4:22 ` Anshuman Khandual 2017-01-31 4:22 ` Anshuman Khandual 2017-01-31 6:05 ` Jerome Glisse 2017-01-31 6:05 ` Jerome Glisse 2017-01-30 3:35 ` [RFC V2 09/12] mm: Exclude CDM marked VMAs from auto NUMA Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [RFC V2 10/12] mm: Ignore madvise(MADV_MERGEABLE) request for VM_CDM marked VMAs Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [RFC V2 11/12] mm: Tag VMA with VM_CDM flag during page fault Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 17:51 ` Dave Hansen 2017-01-30 17:51 ` Dave Hansen 2017-01-31 5:10 ` Anshuman Khandual 2017-01-31 5:10 ` Anshuman Khandual 2017-01-31 17:54 ` Dave Hansen 2017-01-31 17:54 ` Dave Hansen 2017-01-30 3:35 ` [RFC V2 12/12] mm: Tag VMA with VM_CDM flag explicitly during mbind(MPOL_BIND) Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 17:54 ` Dave Hansen 2017-01-30 17:54 ` Dave Hansen 2017-01-31 4:36 ` Anshuman Khandual 2017-01-31 4:36 ` Anshuman Khandual 2017-02-07 18:07 ` Dave Hansen 2017-02-07 18:07 ` Dave Hansen 2017-02-08 14:13 ` Anshuman Khandual 2017-02-08 14:13 ` Anshuman Khandual 2017-02-08 15:04 ` Jerome Glisse 2017-02-08 15:04 ` Jerome Glisse 2017-01-30 3:35 ` [DEBUG 13/21] powerpc/mm: Identify coherent device memory nodes during platform init Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [DEBUG 14/21] powerpc/mm: Create numa nodes for hotplug memory Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [DEBUG 15/21] powerpc/mm: Enable CONFIG_MOVABLE_NODE for PPC64 platform Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [DEBUG 16/21] mm: Enable CONFIG_MOVABLE_NODE on powerpc Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [DEBUG 17/21] mm: Export definition of 'zone_names' array through mmzone.h Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:35 ` [DEBUG 18/21] mm: Add debugfs interface to dump each node's zonelist information Anshuman Khandual 2017-01-30 3:35 ` Anshuman Khandual 2017-01-30 3:36 ` [DEBUG 19/21] mm: Add migrate_virtual_range migration interface Anshuman Khandual 2017-01-30 3:36 ` Anshuman Khandual 2017-01-30 3:36 ` [DEBUG 20/21] drivers: Add two drivers for coherent device memory tests Anshuman Khandual 2017-01-30 3:36 ` Anshuman Khandual 2017-01-30 3:36 ` [DEBUG 21/21] selftests/powerpc: Add a script to perform random VMA migrations Anshuman Khandual 2017-01-30 3:36 ` Anshuman Khandual 2017-01-31 5:48 ` [RFC V2 00/12] Define coherent device memory node Anshuman Khandual 2017-01-31 5:48 ` Anshuman Khandual 2017-01-31 6:15 ` Jerome Glisse 2017-01-31 6:15 ` Jerome Glisse
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=20170131142237.27097-1-khandual@linux.vnet.ibm.com \ --to=khandual@linux.vnet.ibm.com \ --cc=aneesh.kumar@linux.vnet.ibm.com \ --cc=bsingharora@gmail.com \ --cc=dan.j.williams@intel.com \ --cc=dave.hansen@intel.com \ --cc=haren@linux.vnet.ibm.com \ --cc=jglisse@redhat.com \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mm@kvack.org \ --cc=mgorman@suse.de \ --cc=mhocko@suse.com \ --cc=minchan@kernel.org \ --cc=srikar@linux.vnet.ibm.com \ --cc=vbabka@suse.cz \ /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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.