• Toshi Kani's avatar
    mm/hotplug: remove stop_machine() from try_offline_node() · 0f1cfe9d
    Toshi Kani authored
    lock_device_hotplug() serializes hotplug & online/offline operations.  The
    lock is held in common sysfs online/offline interfaces and ACPI hotplug
    code paths.
    
    And here are the code paths:
    
    - CPU & Mem online/offline via sysfs online
    	store_online()->lock_device_hotplug()
    
    - Mem online via sysfs state:
    	store_mem_state()->lock_device_hotplug()
    
    - ACPI CPU & Mem hot-add:
    	acpi_scan_bus_device_check()->lock_device_hotplug()
    
    - ACPI CPU & Mem hot-delete:
    	acpi_scan_hot_remove()->lock_device_hotplug()
    
    try_offline_node() off-lines a node if all memory sections and cpus are
    removed on the node.  It is called from acpi_processor_remove() and
    acpi_memory_remove_memory()->remove_memory() paths, both of which are in
    the ACPI hotplug code.
    
    try_offline_node() calls stop_machine() to stop all cpus while checking
    all cpu status with the assumption that the caller is not protected from
    CPU hotplug or CPU online/offline operations.  However, the caller is
    always serialized with lock_device_hotplug().  Also, the code needs to be
    properly serialized with a lock, not by stopping all cpus at a random
    place with stop_machine().
    
    This patch removes the use of stop_machine() in try_offline_node() and
    adds comments to try_offline_node() and remove_memory() that
    lock_device_hotplug() is required.
    Signed-off-by: default avatarToshi Kani <toshi.kani@hp.com>
    Acked-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Cc: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
    Cc: Tang Chen <tangchen@cn.fujitsu.com>
    Cc: Yasuaki Ishimatsu <isimatu.yasuaki@jp.fujitsu.com>
    Cc: Wanpeng Li <liwanp@linux.vnet.ibm.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    0f1cfe9d
memory_hotplug.c 46.3 KB