• bob picco's avatar
    sparc64: mem boot option correction · 7c21d533
    bob picco authored
    The "mem" boot option can result in many unexpected consequences. This patch
    attempts to prevent boot hangs which have been experienced on T4-4 and T5-8.
    Basically the boot loader allocates vmlinuz and initrd higher in available
    OBP physical memory. For example, on a 2Tb T5-8 it isn't possible to boot
    with mem=20G.
    
    The patch utilizes memblock to avoid reserved regions and trim memory which
    is only free. Other improvements are possible for a multi-node machine.
    
    This is a snippet of the boot log with mem=20G on T5-8 with the patch applied:
    MEMBLOCK configuration:	<- before memory reduction
     memory size = 0x1ffad6ce000 reserved size = 0xa1adf44
     memory.cnt  = 0xb
     memory[0x0]    [0x00000030400000-0x00003fdde47fff], 0x3fada48000 bytes
     memory[0x1]    [0x00003fdde4e000-0x00003fdde4ffff], 0x2000 bytes
     memory[0x2]    [0x00080000000000-0x00083fffffffff], 0x4000000000 bytes
     memory[0x3]    [0x00100000000000-0x00103fffffffff], 0x4000000000 bytes
     memory[0x4]    [0x00180000000000-0x00183fffffffff], 0x4000000000 bytes
     memory[0x5]    [0x00200000000000-0x00203fffffffff], 0x4000000000 bytes
     memory[0x6]    [0x00280000000000-0x00283fffffffff], 0x4000000000 bytes
     memory[0x7]    [0x00300000000000-0x00303fffffffff], 0x4000000000 bytes
     memory[0x8]    [0x00380000000000-0x00383fffc71fff], 0x3fffc72000 bytes
     memory[0x9]    [0x00383fffc92000-0x00383fffca1fff], 0x10000 bytes
     memory[0xa]    [0x00383fffcb4000-0x00383fffcb5fff], 0x2000 bytes
     reserved.cnt  = 0x2
     reserved[0x0]  [0x00380000000000-0x0038000117e7f8], 0x117e7f9 bytes
     reserved[0x1]  [0x00380004000000-0x0038000d02f74a], 0x902f74b bytes
    ...
    MEMBLOCK configuration:	<- after reduction of memory
     memory size = 0x50a1adf44 reserved size = 0xa1adf44
     memory.cnt  = 0x4
     memory[0x0]    [0x00380000000000-0x0038000117e7f8], 0x117e7f9 bytes
     memory[0x1]    [0x00380004000000-0x0038050d01d74a], 0x50901d74b bytes
     memory[0x2]    [0x00383fffc92000-0x00383fffca1fff], 0x10000 bytes
     memory[0x3]    [0x00383fffcb4000-0x00383fffcb5fff], 0x2000 bytes
     reserved.cnt  = 0x2
     reserved[0x0]  [0x00380000000000-0x0038000117e7f8], 0x117e7f9 bytes
     reserved[0x1]  [0x00380004000000-0x0038000d02f74a], 0x902f74b bytes
    ...
    Early memory node ranges
      node   7: [mem 0x380000000000-0x38000117dfff]
      node   7: [mem 0x380004000000-0x380f0d01bfff]
      node   7: [mem 0x383fffc92000-0x383fffca1fff]
      node   7: [mem 0x383fffcb4000-0x383fffcb5fff]
    Could not find start_pfn for node 0
    Could not find start_pfn for node 1
    Could not find start_pfn for node 2
    Could not find start_pfn for node 3
    Could not find start_pfn for node 4
    Could not find start_pfn for node 5
    Could not find start_pfn for node 6
    .
    
    The patch was tested on T4-1, T5-8 and Jalap?no.
    
    Cc: sparclinux@vger.kernel.org
    Signed-off-by: default avatarBob Picco <bob.picco@oracle.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    7c21d533
setup_64.c 14.5 KB