Messages in this thread | | | Date | Fri, 09 Aug 2013 15:28:46 +0800 | From | Tang Chen <> | Subject | Re: [PATCH] ACPI, cpu hotplug: move try_offline_node() after acpi_unmap_lsapic() |
| |
On 08/07/2013 12:56 AM, Toshi Kani wrote: > On Tue, 2013-08-06 at 19:11 +0900, Yasuaki Ishimatsu wrote: >> try_offline_node() checks that all cpus related with removed node have been >> removed by using cpu_present_bits. If all cpus related with removed node have >> been removed, try_offline_node() clears the node information. >> >> But try_offline_node() called from acpi_processor_remove() never clears >> the node information. For disabling cpu_present_bits, acpi_unmap_lsapic() >> need be called. But acpi_unmap_lsapic() is called after try_offline_node() >> runs. So when try_offline_node() runs, the cpu's cpu_present_bits is always >> set. >> >> This patch moves try_offline_node() after acpi_unmap_lsapic(). >> >> Signed-off-by: Yasuaki Ishimatsu<isimatu.yasuaki@jp.fujitsu.com> > > The change looks good to me. > > Acked-by: Toshi Kani<toshi.kani@hp.com> > > BTW, do you know why try_offline_node() has to use stop_machine()?
try_offline_node() is used to check if the node could be hot-removed after each memory or cpu hot-remove operation.
In memory hot-remove path, we have lock_memory_hotplug() to series all the memory hot-remove options.
But when doing cpu hot-remove,
acpi_processor_remove() |->try_offline_node()
There is no lock to protect it. I think, when we are going to hot-remove a node, others should not do any memory or cpu hotplug operation. In memory hotplug path, we have lock_memory_hotplug(). But in cpu hotplug path, I didn't find any lock. So we used stop_machine() to call check_cpu_on_node(). If we find any cpu still present, we return and do not remove the node.
Thanks.
| |