diff options
author | Tang Chen <tangchen@cn.fujitsu.com> | 2013-02-22 19:33:14 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-23 20:50:13 -0500 |
commit | 60a5a19e7419ba0bc22ed01b3285e8940b42944c (patch) | |
tree | ab50aec968bd3386c53c8611f9e0215910daa6bd /drivers/acpi | |
parent | 815121d2b5cd56f1757d4468dc3abadd06a0ed6b (diff) |
memory-hotplug: remove sysfs file of node
Introduce a new function try_offline_node() to remove sysfs file of node
when all memory sections of this node are removed. If some memory
sections of this node are not removed, this function does nothing.
Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: Tang 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>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/acpi')
-rw-r--r-- | drivers/acpi/acpi_memhotplug.c | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/drivers/acpi/acpi_memhotplug.c b/drivers/acpi/acpi_memhotplug.c index 034d3e72aa92..da1f82b445e0 100644 --- a/drivers/acpi/acpi_memhotplug.c +++ b/drivers/acpi/acpi_memhotplug.c | |||
@@ -280,9 +280,11 @@ static int acpi_memory_enable_device(struct acpi_memory_device *mem_device) | |||
280 | 280 | ||
281 | static int acpi_memory_remove_memory(struct acpi_memory_device *mem_device) | 281 | static int acpi_memory_remove_memory(struct acpi_memory_device *mem_device) |
282 | { | 282 | { |
283 | int result = 0; | 283 | int result = 0, nid; |
284 | struct acpi_memory_info *info, *n; | 284 | struct acpi_memory_info *info, *n; |
285 | 285 | ||
286 | nid = acpi_get_node(mem_device->device->handle); | ||
287 | |||
286 | list_for_each_entry_safe(info, n, &mem_device->res_list, list) { | 288 | list_for_each_entry_safe(info, n, &mem_device->res_list, list) { |
287 | if (info->failed) | 289 | if (info->failed) |
288 | /* The kernel does not use this memory block */ | 290 | /* The kernel does not use this memory block */ |
@@ -295,7 +297,9 @@ static int acpi_memory_remove_memory(struct acpi_memory_device *mem_device) | |||
295 | */ | 297 | */ |
296 | return -EBUSY; | 298 | return -EBUSY; |
297 | 299 | ||
298 | result = remove_memory(info->start_addr, info->length); | 300 | if (nid < 0) |
301 | nid = memory_add_physaddr_to_nid(info->start_addr); | ||
302 | result = remove_memory(nid, info->start_addr, info->length); | ||
299 | if (result) | 303 | if (result) |
300 | return result; | 304 | return result; |
301 | 305 | ||