• Stephen Wilson's avatar
    proc: allocate storage for numa_maps statistics once · 5b52fc89
    Stephen Wilson authored
    In show_numa_map() we collect statistics into a numa_maps structure.
    Since the number of NUMA nodes can be very large, this structure is not a
    candidate for stack allocation.
    
    Instead of going thru a kmalloc()+kfree() cycle each time show_numa_map()
    is invoked, perform the allocation just once when /proc/pid/numa_maps is
    opened.
    
    Performing the allocation when numa_maps is opened, and thus before a
    reference to the target tasks mm is taken, eliminates a potential
    stalemate condition in the oom-killer as originally described by Hugh
    Dickins:
    
      ... imagine what happens if the system is out of memory, and the mm
      we're looking at is selected for killing by the OOM killer: while
      we wait in __get_free_page for more memory, no memory is freed
      from the selected mm because it cannot reach exit_mmap while we hold
      that reference.
    Signed-off-by: default avatarStephen Wilson <wilsons@start.ca>
    Reviewed-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Hugh Dickins <hughd@google.com>
    Cc: David Rientjes <rientjes@google.com>
    Cc: Lee Schermerhorn <lee.schermerhorn@hp.com>
    Cc: Alexey Dobriyan <adobriyan@gmail.com>
    Cc: Christoph Lameter <cl@linux-foundation.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    5b52fc89
task_mmu.c 26.1 KB