• Paul Jackson's avatar
    [PATCH] cpuset: top_cpuset tracks hotplug changes to node_online_map · 38837fc7
    Paul Jackson authored
    Change the list of memory nodes allowed to tasks in the top (root) nodeset
    to dynamically track what cpus are online, using a call to a cpuset hook
    from the memory hotplug code.  Make this top cpus file read-only.
    On systems that have cpusets configured in their kernel, but that aren't
    actively using cpusets (for some distros, this covers the majority of
    systems) all tasks end up in the top cpuset.
    If that system does support memory hotplug, then these tasks cannot make
    use of memory nodes that are added after system boot, because the memory
    nodes are not allowed in the top cpuset.  This is a surprising regression
    over earlier kernels that didn't have cpusets enabled.
    One key motivation for this change is to remain consistent with the
    behaviour for the top_cpuset's 'cpus', which is also read-only, and which
    automatically tracks the cpu_online_map.
    This change also has the minor benefit that it fixes a long standing,
    little noticed, minor bug in cpusets.  The cpuset performance tweak to
    short circuit the cpuset_zone_allowed() check on systems with just a single
    cpuset (see 'number_of_cpusets', in linux/cpuset.h) meant that simply
    changing the 'mems' of the top_cpuset had no affect, even though the change
    (the write system call) appeared to succeed.  With the following change,
    that write to the 'mems' file fails -EACCES, and the 'mems' file stubbornly
    refuses to be changed via user space writes.  Thus no one should be mislead
    into thinking they've changed the top_cpusets's 'mems' when in affect they
    In order to keep the behaviour of cpusets consistent between systems
    actively making use of them and systems not using them, this patch changes
    the behaviour of the 'mems' file in the top (root) cpuset, making it read
    only, and making it automatically track the value of node_online_map.  Thus
    tasks in the top cpuset will have automatic use of hot plugged memory nodes
    allowed by their cpuset.
    [akpm@osdl.org: build fix]
    [bunk@stusta.de: build fix]
    Signed-off-by: default avatarPaul Jackson <pj@sgi.com>
    Signed-off-by: default avatarAdrian Bunk <bunk@stusta.de>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
cpuset.c 73.6 KB