• Y
    memory-hotplug: check whether all memory blocks are offlined or not when removing memory · 6677e3ea
    Yasuaki Ishimatsu 提交于
    We remove the memory like this:
    
     1. lock memory hotplug
     2. offline a memory block
     3. unlock memory hotplug
     4. repeat 1-3 to offline all memory blocks
     5. lock memory hotplug
     6. remove memory(TODO)
     7. unlock memory hotplug
    
    All memory blocks must be offlined before removing memory.  But we don't
    hold the lock in the whole operation.  So we should check whether all
    memory blocks are offlined before step6.  Otherwise, kernel maybe
    panicked.
    
    Offlining a memory block and removing a memory device can be two
    different operations.  Users can just offline some memory blocks without
    removing the memory device.  For this purpose, the kernel has held
    lock_memory_hotplug() in __offline_pages().  To reuse the code for
    memory hot-remove, we repeat step 1-3 to offline all the memory blocks,
    repeatedly lock and unlock memory hotplug, but not hold the memory
    hotplug lock in the whole operation.
    Signed-off-by: NWen Congyang <wency@cn.fujitsu.com>
    Signed-off-by: NYasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Signed-off-by: NTang Chen <tangchen@cn.fujitsu.com>
    Acked-by: NKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.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: Ingo Molnar <mingo@elte.hu>
    Cc: Thomas Gleixner <tglx@linutronix.de>
    Cc: "H. Peter Anvin" <hpa@zytor.com>
    Signed-off-by: NAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: NLinus Torvalds <torvalds@linux-foundation.org>
    6677e3ea
memory.c 18.0 KB