• Sumanth Korikkar's avatar
    s390/mm: allocate vmemmap pages from self-contained memory range · 1a65b73a
    Sumanth Korikkar authored
    Allocate memory map (struct pages array) from the hotplugged memory
    range, rather than using system memory. The change addresses the issue
    where standby memory, when configured to be much larger than online
    memory, could potentially lead to ipl failure due to memory map
    allocation from online memory. For example, 16MB of memory map
    allocation is needed for a memory block size of 1GB and when standby
    memory is configured much larger than online memory, this could lead to
    ipl failure.
    
    To address this issue, the solution involves introducing "memmap on
    memory" using the vmem_altmap structure on s390.  Architectures that
    want to implement it should pass the altmap to the vmemmap_populate()
    function and its associated callchain. This enhancement is discussed in
    commit 4b94ffdc ("x86, mm: introduce vmem_altmap to augment
    vmemmap_populate()")
    
    Provide "memmap on memory" support for s390 by passing the altmap in
    vmemmap_populate() and its callchain. The allocation path is described
    as follows:
    * When altmap is NULL in vmemmap_populate(), memory map allocation
      occurs using the existing vmemmap_alloc_block_buf().
    * When altmap is not NULL in vmemmap_populate(), memory map allocation
      still uses vmemmap_alloc_block_buf(), but this function internally
      calls altmap_alloc_block_buf().
    
    For deallocation, the process is outlined as follows:
    * When altmap is NULL in vmemmap_free(), memory map deallocation happens
      through free_pages().
    * When altmap is not NULL in vmemmap_free(), memory map deallocation
      occurs via vmem_altmap_free().
    
    While memory map allocation is primarily handled through the
    self-contained memory map range, there might still be a small amount of
    system memory allocation required for vmemmap pagetables. To mitigate
    this impact, this feature will be limited to machines with EDAT1
    support.
    
    Link: https://lkml.kernel.org/r/20240108132747.3238763-3-sumanthk@linux.ibm.comReviewed-by: default avatarGerald Schaefer <gerald.schaefer@linux.ibm.com>
    Signed-off-by: default avatarSumanth Korikkar <sumanthk@linux.ibm.com>
    Cc: Alexander Gordeev <agordeev@linux.ibm.com>
    Cc: Aneesh Kumar K.V <aneesh.kumar@linux.ibm.com>
    Cc: Anshuman Khandual <anshuman.khandual@arm.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Heiko Carstens <hca@linux.ibm.com>
    Cc: Michal Hocko <mhocko@suse.com>
    Cc: Oscar Salvador <osalvador@suse.de>
    Cc: Vasily Gorbik <gor@linux.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    1a65b73a
init.c 7.2 KB