lkml.org 
[lkml]   [2017]   [Jan]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC V2 06/12] mm: Exclude CDM nodes from task->mems_allowed and root cpuset
    Date
    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 <khandual@linux.vnet.ibm.com>
    ---
    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
    \
     
     \ /
      Last update: 2017-01-30 04:40    [W:4.138 / U:0.144 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site