• Cody P Schafer's avatar
    mm/page_alloc: convert zone_pcp_update() to rely on memory barriers instead of stop_machine() · 0a647f38
    Cody P Schafer authored
    zone_pcp_update()'s goal is to adjust the ->high and ->mark members of a
    percpu pageset based on a zone's ->managed_pages.  We don't need to drain
    the entire percpu pageset just to modify these fields.
    
    This lets us avoid calling setup_pageset() (and the draining required to
    call it) and instead allows simply setting the fields' values (with some
    attention paid to memory barriers to prevent the relationship between
    ->batch and ->high from being thrown off).
    
    This does change the behavior of zone_pcp_update() as the percpu pagesets
    will not be drained when zone_pcp_update() is called (they will end up
    being shrunk, not completely drained, later when a 0-order page is freed
    in free_hot_cold_page()).
    Signed-off-by: default avatarCody P Schafer <cody@linux.vnet.ibm.com>
    Cc: Gilad Ben-Yossef <gilad@benyossef.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@gmail.com>
    Cc: Mel Gorman <mgorman@suse.de>
    Cc: Pekka Enberg <penberg@kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    0a647f38
page_alloc.c 173 KB