• David Rientjes's avatar
    mempolicy: add MPOL_F_RELATIVE_NODES flag · 4c50bc01
    David Rientjes authored
    Adds another optional mode flag, MPOL_F_RELATIVE_NODES, that specifies
    nodemasks passed via set_mempolicy() or mbind() should be considered relative
    to the current task's mems_allowed.
    
    When the mempolicy is created, the passed nodemask is folded and mapped onto
    the current task's mems_allowed.  For example, consider a task using
    set_mempolicy() to pass MPOL_INTERLEAVE | MPOL_F_RELATIVE_NODES with a
    nodemask of 1-3.  If current's mems_allowed is 4-7, the effected nodemask is
    5-7 (the second, third, and fourth node of mems_allowed).
    
    If the same task is attached to a cpuset, the mempolicy nodemask is rebound
    each time the mems are changed.  Some possible rebinds and results are:
    
    	mems			result
    	1-3			1-3
    	1-7			2-4
    	1,5-6			1,5-6
    	1,5-7			5-7
    
    Likewise, the zonelist built for MPOL_BIND acts on the set of zones assigned
    to the resultant nodemask from the relative remap.
    
    In the MPOL_PREFERRED case, the preferred node is remapped from the currently
    effected nodemask to the relative nodemask.
    
    This mempolicy mode flag was conceived of by Paul Jackson <pj@sgi.com>.
    
    Cc: Paul Jackson <pj@sgi.com>
    Cc: Christoph Lameter <clameter@sgi.com>
    Cc: Lee Schermerhorn <Lee.Schermerhorn@hp.com>
    Cc: Andi Kleen <ak@suse.de>
    Signed-off-by: default avatarDavid Rientjes <rientjes@google.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    4c50bc01
mempolicy.c 52.8 KB