• David S. Miller's avatar
    sparc64: Fix cmdline_memory_size handling bugs. · c5b15cb1
    David S. Miller authored
    [ Upstream commit f2b60794 ]
    
    First, lmb_enforce_memory_limit() interprets it's argument
    (mostly, heh) as a size limit not an address limit.  So pass
    the raw cmdline_memory_size value into it.  And we don't
    need to check it against zero, lmb_enforce_memory_limit() does
    that for us.
    
    Next, free_initmem() needs special handling when the kernel
    command line trims the available memory.  The problem case is
    if the trimmed out memory is where the kernel image itself
    resides.
    
    When that memory is trimmed out, we don't add those physical
    ram areas to the sparsemem active ranges, amongst other things.
    Which means that this free_initmem() code will free up invalid
    page structs, resulting in either crashes or hangs.
    
    Just quick fix this by not freeing initmem at all if "mem="
    was given on the boot command line.
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    c5b15cb1
init.c 58.8 KB