• J
    [PATCH] ia64 cpuset + build_sched_domains() mangles structures · f68f447e
    John Hawkes 提交于
    I've already sent this to the maintainers, and this is now being sent to a
    larger community audience.  I have fixed a problem with the ia64 version of
    build_sched_domains(), but a similar fix still needs to be made to the
    generic build_sched_domains() in kernel/sched.c.
    
    The "dynamic sched domains" functionality has recently been merged into
    2.6.13-rcN that sees the dynamic declaration of a cpu-exclusive (a.k.a.
    "isolated") cpuset and rebuilds the CPU Scheduler sched domains and sched
    groups to separate away the CPUs in this cpu-exclusive cpuset from the
    remainder of the non-isolated CPUs.  This allows the non-isolated CPUs to
    completely ignore the isolated CPUs when doing load-balancing.
    
    Unfortunately, build_sched_domains() expects that a sched domain will
    include all the CPUs of each node in the domain, i.e., that no node will
    belong in both an isolated cpuset and a non-isolated cpuset.  Declaring a
    cpuset that violates this presumption will produce flawed data structures
    and will oops the kernel.
    
    To trigger the problem (on a NUMA system with >1 CPUs per node):
       cd /dev/cpuset
       mkdir newcpuset
       cd newcpuset
       echo 0 >cpus
       echo 0 >mems
       echo 1 >cpu_exclusive
    
    I have fixed this shortcoming for ia64 NUMA (with multiple CPUs per node).
    A similar shortcoming exists in the generic build_sched_domains() (in
    kernel/sched.c) for NUMA, and that needs to be fixed also.  The fix
    involves dynamically allocating sched_group_nodes[] and
    sched_group_allnodes[] for each invocation of build_sched_domains(), rather
    than using global arrays for these structures.  Care must be taken to
    remember kmalloc() addresses so that arch_destroy_sched_domains() can
    properly kfree() the new dynamic structures.
    Signed-off-by: NJohn Hawkes <hawkes@sgi.com>
    Cc: Nick Piggin <nickpiggin@yahoo.com.au>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: "Luck, Tony" <tony.luck@intel.com>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    f68f447e
domain.c 10.4 KB