• Tejun Heo's avatar
    bootmem, x86: further fixes for arch-specific bootmem wrapping · d0c4f570
    Tejun Heo authored
    Impact: fix new breakages introduced by previous fix
    
    Commit c1329375 tried to clean up
    bootmem arch wrapper but it wasn't quite correct.  Before the commit,
    the followings were broken.
    
    * Low level interface functions prefixed with __ ignored arch
      preference.
    
    * reserve_bootmem(...) can't be mapped into
      reserve_bootmem_node(NODE_DATA(0)->bdata, ...) because the node is
      not preference here.  The region specified MUST fall into the
      specified region; otherwise, it will panic.
    
    After the commit,
    
    * If allocation fails for the arch preferred node, it should fallback
      to whatever is available.  Instead, it simply failed allocation.
    
    There are too many internal details to allow generic wrapping and
    still keep things simple for archs.  Plus, all that arch wants is a
    way to prefer certain node over another.
    
    This patch drops the generic wrapping around alloc_bootmem_core() and
    add alloc_bootmem_core() instead.  If necessary, arch can define
    bootmem_arch_referred_node() macro or function which takes all
    allocation information and returns the preferred node.  bootmem
    generic code will always try the preferred node first and then
    fallback to other nodes as usual.
    
    Breakages noted and changes reviewed by Johannes Weiner.
    Signed-off-by: default avatarTejun Heo <tj@kernel.org>
    Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
    d0c4f570
bootmem.c 18.4 KB