• Paul Jackson's avatar
    [PATCH] cpuset: better bitmap remap defaults · 96b7f341
    Paul Jackson authored
    Fix the default behaviour for the remap operators in bitmap, cpumask and
    nodemask.
    
    As previously submitted, the pair of masks <A, B> defined a map of the
    positions of the set bits in A to the corresponding bits in B.  This is still
    true.
    
    The issue is how to map the other positions, corresponding to the unset (0)
    bits in A.  As previously submitted, they were all mapped to the first set bit
    position in B, a constant map.
    
    When I tried to code per-vma mempolicy rebinding using these remap operators,
    I realized this was wrong.
    
    This patch changes the default to map all the unset bit positions in A to the
    same positions in B, the identity map.
    
    For example, if A has bits 4-7 set, and B has bits 9-12 set, then the map
    defined by the pair <A, B> maps each bit position in the first 32 bits as
    follows:
    
    	0 ==> 0
    	  ...
    	3 ==> 3
    	4 ==> 9
    	  ...
    	7 ==> 12
    	8 ==> 8
    	9 ==> 9
    	  ...
    	31 ==> 31
    
    This now corresponds to the typical behaviour desired when migrating pages and
    policies from one cpuset to another.
    
    The pages on nodes within the original cpuset, and the references in memory
    policies to nodes within the original cpuset, are migrated to the
    corresponding cpuset-relative nodes in the destination cpuset.  Other pages
    and node references are left untouched.
    Signed-off-by: default avatarPaul Jackson <pj@sgi.com>
    Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
    96b7f341
bitmap.c 21.5 KB