diff options
author | Tang Chen <tangchen@cn.fujitsu.com> | 2013-02-22 19:33:06 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2013-02-23 20:50:12 -0500 |
commit | bbcab8789d4a5b942773aa7496794ceebe2d3f78 (patch) | |
tree | a57c8765ccd0e336ce423249f186c8603abdc9e3 /arch/x86/mm | |
parent | ae9aae9eda2db71bf4b592f15618b0160eb07731 (diff) |
memory-hotplug: remove page table of x86_64 architecture
Search a page table about the removed memory, and clear page table for
x86_64 architecture.
[akpm@linux-foundation.org: make kernel_physical_mapping_remove() static]
Signed-off-by: Wen Congyang <wency@cn.fujitsu.com>
Signed-off-by: Jianguo Wu <wujianguo@huawei.com>
Signed-off-by: Jiang Liu <jiang.liu@huawei.com>
Signed-off-by: Tang Chen <tangchen@cn.fujitsu.com>
Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.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/x86/mm')
-rw-r--r-- | arch/x86/mm/init_64.c | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index ca6cd403a275..4e58b83e6b2e 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c | |||
@@ -1011,6 +1011,15 @@ remove_pagetable(unsigned long start, unsigned long end, bool direct) | |||
1011 | flush_tlb_all(); | 1011 | flush_tlb_all(); |
1012 | } | 1012 | } |
1013 | 1013 | ||
1014 | static void __meminit | ||
1015 | kernel_physical_mapping_remove(unsigned long start, unsigned long end) | ||
1016 | { | ||
1017 | start = (unsigned long)__va(start); | ||
1018 | end = (unsigned long)__va(end); | ||
1019 | |||
1020 | remove_pagetable(start, end, true); | ||
1021 | } | ||
1022 | |||
1014 | #ifdef CONFIG_MEMORY_HOTREMOVE | 1023 | #ifdef CONFIG_MEMORY_HOTREMOVE |
1015 | int __ref arch_remove_memory(u64 start, u64 size) | 1024 | int __ref arch_remove_memory(u64 start, u64 size) |
1016 | { | 1025 | { |
@@ -1020,6 +1029,7 @@ int __ref arch_remove_memory(u64 start, u64 size) | |||
1020 | int ret; | 1029 | int ret; |
1021 | 1030 | ||
1022 | zone = page_zone(pfn_to_page(start_pfn)); | 1031 | zone = page_zone(pfn_to_page(start_pfn)); |
1032 | kernel_physical_mapping_remove(start, start + size); | ||
1023 | ret = __remove_pages(zone, start_pfn, nr_pages); | 1033 | ret = __remove_pages(zone, start_pfn, nr_pages); |
1024 | WARN_ON_ONCE(ret); | 1034 | WARN_ON_ONCE(ret); |
1025 | 1035 | ||