Skip to content
  • Tang Chen's avatar
    acpi, memory-hotplug: support getting hotplug info from SRAT · 01a178a9
    Tang Chen authored
    
    
    We now provide an option for users who don't want to specify physical
    memory address in kernel commandline.
    
             /*
              * For movablemem_map=acpi:
              *
              * SRAT:                |_____| |_____| |_________| |_________| ......
              * node id:                0       1         1           2
              * hotpluggable:           n       y         y           n
              * movablemem_map:              |_____| |_________|
              *
              * Using movablemem_map, we can prevent memblock from allocating memory
              * on ZONE_MOVABLE at boot time.
              */
    
    So user just specify movablemem_map=acpi, and the kernel will use
    hotpluggable info in SRAT to determine which memory ranges should be set
    as ZONE_MOVABLE.
    
    If all the memory ranges in SRAT is hotpluggable, then no memory can be
    used by kernel.  But before parsing SRAT, memblock has already reserve
    some memory ranges for other purposes, such as for kernel image, and so
    on.  We cannot prevent kernel from using these memory.  So we need to
    exclude these ranges even if these memory is hotpluggable.
    
    Furthermore, there could be several memory ranges in the single node
    which the kernel resides in.  We may skip one range that have memory
    reserved by memblock, but if the rest of memory is too small, then the
    kernel will fail to boot.  So, make the whole node which the kernel
    resides in un-hotpluggable.  Then the kernel has enough memory to use.
    
    NOTE: Using this way will cause NUMA performance down because the
          whole node will be set as ZONE_MOVABLE, and kernel cannot use memory
          on it.  If users don't want to lose NUMA performance, just don't use
          it.
    
    [akpm@linux-foundation.org: fix warning]
    [akpm@linux-foundation.org: use strcmp()]
    Signed-off-by: default avatarTang Chen <tangchen@cn.fujitsu.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: Jiang Liu <jiang.liu@huawei.com>
    Cc: Jianguo Wu <wujianguo@huawei.com>
    Cc: Kamezawa Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Lai Jiangshan <laijs@cn.fujitsu.com>
    Cc: Wu Jianguo <wujianguo@huawei.com>
    Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Cc: Len Brown <lenb@kernel.org>
    Cc: "Brown, Len" <len.brown@intel.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    01a178a9