• Miao Xie's avatar
    cpusets: update task's cpus_allowed and mems_allowed after CPU/NODE offline/online · f9b4fb8d
    Miao Xie authored
    The bug is that a task may run on the cpu/node which is not in its
    cpuset.cpus/ cpuset.mems.
    
    It can be reproduced by the following commands:
    -----------------------------------
    # mkdir /dev/cpuset
    # mount -t cpuset xxx /dev/cpuset
    # mkdir /dev/cpuset/0
    # echo 0-1 > /dev/cpuset/0/cpus
    # echo 0 > /dev/cpuset/0/mems
    # echo $$ > /dev/cpuset/0/tasks
    # echo 0 > /sys/devices/system/cpu/cpu1/online
    # echo 1 > /sys/devices/system/cpu/cpu1/online
    -----------------------------------
    
    There is only CPU0 in cpuset.cpus, but the task in this cpuset runs on
    both CPU0 and CPU1.
    
    It is because the task's cpu_allowed didn't get updated after we did CPU
    offline/online manipulation.  Similar for mem_allowed.
    
    This patch fixes this bug expect for root cpuset.  Because there is a
    problem about root cpuset, in that whether it is necessary to update all
    the tasks in root cpuset or not after cpu/node offline/online.
    
    If updating, some kernel threads which is bound into a specified cpu will
    be unbound.
    
    If not updating, there is a bug in root cpuset.  This bug is also caused
    by offline/online manipulation.  For example, there is a dual-cpu machine.
     we create a sub cpuset in root cpuset and assign 1 to its cpus.  And then
    we attach some tasks into this sub cpuset.  After this, we offline CPU1.
    Now, the tasks in this new cpuset are moved into root cpuset automatically
    because there is no cpu in sub cpuset.  Then we online CPU1, we find all
    the tasks which doesn't belong to root cpuset originally just run on CPU0.
    
    Maybe we need to add a flag in the task_struct to mark which task can't be
    unbound?
    Signed-off-by: default avatarMiao Xie <miaox@cn.fujitsu.com>
    Acked-by: default avatarPaul Jackson <pj@sgi.com>
    Cc: Li Zefan <lizf@cn.fujitsu.com>
    Cc: Paul Jackson <pj@sgi.com>
    Cc: Paul Menage <menage@google.com>
    Cc: David Rientjes <rientjes@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f9b4fb8d
cpuset.c 69.6 KB