diff options
author | Wen Congyang <wency@cn.fujitsu.com> | 2013-02-22 19:32:58 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-23 20:50:12 -0500 |
commit | 24d335ca3606b610ec69c66a1e42760c96d89470 (patch) | |
tree | 62d6157cbb273c029ea1052690725037524cbbeb /arch/sh/mm | |
parent | 46c66c4b7ba0f9bb3e2ae3a3cfd40cd3472c8f80 (diff) |
memory-hotplug: introduce new arch_remove_memory() for removing page table
For removing memory, we need to remove page tables. But it depends on
architecture. So the patch introduce arch_remove_memory() for removing
page table. Now it only calls __remove_pages().
Note: __remove_pages() for some archtecuture is not implemented
(I don't know how to implement it for s390).
Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
Acked-by: KAMEZAWA 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: 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 'arch/sh/mm')
-rw-r--r-- | arch/sh/mm/init.c | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c index 82cc576fab15..105794037143 100644 --- a/arch/sh/mm/init.c +++ b/arch/sh/mm/init.c | |||
@@ -558,4 +558,21 @@ int memory_add_physaddr_to_nid(u64 addr) | |||
558 | EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid); | 558 | EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid); |
559 | #endif | 559 | #endif |
560 | 560 | ||
561 | #ifdef CONFIG_MEMORY_HOTREMOVE | ||
562 | int arch_remove_memory(u64 start, u64 size) | ||
563 | { | ||
564 | unsigned long start_pfn = start >> PAGE_SHIFT; | ||
565 | unsigned long nr_pages = size >> PAGE_SHIFT; | ||
566 | struct zone *zone; | ||
567 | int ret; | ||
568 | |||
569 | zone = page_zone(pfn_to_page(start_pfn)); | ||
570 | ret = __remove_pages(zone, start_pfn, nr_pages); | ||
571 | if (unlikely(ret)) | ||
572 | pr_warn("%s: Failed, __remove_pages() == %d\n", __func__, | ||
573 | ret); | ||
574 | |||
575 | return ret; | ||
576 | } | ||
577 | #endif | ||
561 | #endif /* CONFIG_MEMORY_HOTPLUG */ | 578 | #endif /* CONFIG_MEMORY_HOTPLUG */ |