• Hari Bathini's avatar
    powerpc/fadump: Set an upper limit for boot memory size · 48a316e3
    Hari Bathini authored
    By default, 5% of system RAM is reserved for preserving boot memory.
    Alternatively, a user can specify the amount of memory to reserve.
    See Documentation/powerpc/firmware-assisted-dump.txt for details. In
    addition to the memory reserved for preserving boot memory, some more
    memory is reserved, to save HPTE region, CPU state data and ELF core
    headers.
    
    Memory Reservation during first kernel looks like below:
    
      Low memory                                        Top of memory
      0      boot memory size                                       |
      |           |                       |<--Reserved dump area -->|
      V           V                       |   Permanent Reservation V
      +-----------+----------/ /----------+---+----+-----------+----+
      |           |                       |CPU|HPTE|  DUMP     |ELF |
      +-----------+----------/ /----------+---+----+-----------+----+
            |                                           ^
            |                                           |
            \                                           /
             -------------------------------------------
              Boot memory content gets transferred to
              reserved area by firmware at the time of
              crash
    
    This implicitly means that the sum of the sizes of boot memory, CPU
    state data, HPTE region, DUMP preserving area and ELF core headers
    can't be greater than the total memory size. But currently, a user is
    allowed to specify any value as boot memory size. So, the above rule
    is violated when a boot memory size around 50% of the total available
    memory is specified. As the kernel is not handling this currently, it
    may lead to undefined behavior. Fix it by setting an upper limit for
    boot memory size to 25% of the total available memory. Also, instead
    of using memblock_end_of_DRAM(), which doesn't take the holes, if any,
    in the memory layout into account, use memblock_phys_mem_size() to
    calculate the percentage of total available memory.
    Signed-off-by: default avatarHari Bathini <hbathini@linux.vnet.ibm.com>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    48a316e3
fadump.c 38 KB