Skip to content
  • Oliver O'Halloran's avatar
    powerpc/mm: Fallback to RAM if the altmap is unusable · 9ef34630
    Oliver O'Halloran authored
    The "altmap" is used to provide a pool of memory that is reserved for
    the vmemmap backing of hot-plugged memory. This is useful when adding
    large amount of ZONE_DEVICE memory to a system with a limited amount of
    normal memory.
    
    On ppc64 we use huge pages to map the vmemmap which requires the backing
    storage to be contigious and aligned to the hugepage size. The altmap
    implementation allows for the altmap provider to reserve a few PFNs at
    the start of the range for it's own uses and when this occurs the
    first chunk of the altmap is not usable for hugepage mappings. On hash
    there is no sane way to fall back to a normal sized page mapping so we
    fail the allocation. This results in memory hotplug failing with
    ENOMEM when the new range doesn't fall into an existing vmemmap block.
    
    This patch handles this case by falling back to using system memory
    rather than failing if we cannot allocate from the altmap. This
    fallback should only ever be used for the first vmemmap block so it
    should not cause excess memory consumption.
    
    Fixes: 7b73d978
    
     ("mm: pass the vmem_altmap to vmemmap_populate")
    Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    9ef34630