• Baoquan He's avatar
    mm/memory_hotplug.c: only respect mem= parameter during boot stage · f3cd4c86
    Baoquan He authored
    In commit 357b4da5 ("x86: respect memory size limiting via mem=
    parameter") a global varialbe max_mem_size is added to store the value
    parsed from 'mem= ', then checked when memory region is added.  This truly
    stops those DIMMs from being added into system memory during boot-time.
    
    However, it also limits the later memory hotplug functionality.  Any DIMM
    can't be hotplugged any more if its region is beyond the max_mem_size.  We
    will get errors like:
    
    [  216.387164] acpi PNP0C80:02: add_memory failed
    [  216.389301] acpi PNP0C80:02: acpi_memory_enable_device() error
    [  216.392187] acpi PNP0C80:02: Enumeration failure
    
    This will cause issue in a known use case where 'mem=' is added to the
    hypervisor.  The memory that lies after 'mem=' boundary will be assigned
    to KVM guests.  After commit 357b4da5 merged, memory can't be extended
    dynamically if system memory on hypervisor is not sufficient.
    
    So fix it by also checking if it's during boot-time restricting to add
    memory.  Otherwise, skip the restriction.
    
    And also add this use case to document of 'mem=' kernel parameter.
    
    Fixes: 357b4da5 ("x86: respect memory size limiting via mem= parameter")
    Signed-off-by: default avatarBaoquan He <bhe@redhat.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Reviewed-by: default avatarJuergen Gross <jgross@suse.com>
    Acked-by: default avatarMichal Hocko <mhocko@suse.com>
    Cc: Ingo Molnar <mingo@kernel.org>
    Cc: William Kucharski <william.kucharski@oracle.com>
    Cc: David Hildenbrand <david@redhat.com>
    Cc: Balbir Singh <bsingharora@gmail.com>
    Link: http://lkml.kernel.org/r/20200204050643.20925-1-bhe@redhat.comSigned-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f3cd4c86
memory_hotplug.c 47.5 KB