diff options
author | Badari Pulavarty <pbadari@us.ibm.com> | 2008-10-18 23:25:58 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-20 11:50:25 -0400 |
commit | 71088785c6bc68fddb450063d57b1bd1c78e0ea1 (patch) | |
tree | 026e0e2be8aac85959424211f7e319be6cac40ca | |
parent | 8433ac61acf733dc4b427de5f0891518c21538f9 (diff) |
mm: cleanup to make remove_memory() arch-neutral
There is nothing architecture specific about remove_memory().
remove_memory() function is common for all architectures which support
hotplug memory remove. Instead of duplicating it in every architecture,
collapse them into arch neutral function.
[akpm@linux-foundation.org: fix the export]
Signed-off-by: Badari Pulavarty <pbadari@us.ibm.com>
Cc: Yasunori Goto <y-goto@jp.fujitsu.com>
Cc: Gary Hade <garyhade@us.ibm.com>
Cc: Mel Gorman <mel@csn.ul.ie>
Cc: Yasunori Goto <y-goto@jp.fujitsu.com>
Cc: "Luck, Tony" <tony.luck@intel.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | arch/ia64/mm/init.c | 17 | ||||
-rw-r--r-- | arch/powerpc/mm/mem.c | 17 | ||||
-rw-r--r-- | arch/s390/mm/init.c | 11 | ||||
-rw-r--r-- | mm/memory_hotplug.c | 12 |
4 files changed, 11 insertions, 46 deletions
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c index f482a9098e32..054bcd9439aa 100644 --- a/arch/ia64/mm/init.c +++ b/arch/ia64/mm/init.c | |||
@@ -700,23 +700,6 @@ int arch_add_memory(int nid, u64 start, u64 size) | |||
700 | 700 | ||
701 | return ret; | 701 | return ret; |
702 | } | 702 | } |
703 | #ifdef CONFIG_MEMORY_HOTREMOVE | ||
704 | int remove_memory(u64 start, u64 size) | ||
705 | { | ||
706 | unsigned long start_pfn, end_pfn; | ||
707 | unsigned long timeout = 120 * HZ; | ||
708 | int ret; | ||
709 | start_pfn = start >> PAGE_SHIFT; | ||
710 | end_pfn = start_pfn + (size >> PAGE_SHIFT); | ||
711 | ret = offline_pages(start_pfn, end_pfn, timeout); | ||
712 | if (ret) | ||
713 | goto out; | ||
714 | /* we can free mem_map at this point */ | ||
715 | out: | ||
716 | return ret; | ||
717 | } | ||
718 | EXPORT_SYMBOL_GPL(remove_memory); | ||
719 | #endif /* CONFIG_MEMORY_HOTREMOVE */ | ||
720 | #endif | 703 | #endif |
721 | 704 | ||
722 | /* | 705 | /* |
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 98d7bf99533a..b9e1a1da6e52 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c | |||
@@ -134,23 +134,6 @@ int arch_add_memory(int nid, u64 start, u64 size) | |||
134 | 134 | ||
135 | return __add_pages(zone, start_pfn, nr_pages); | 135 | return __add_pages(zone, start_pfn, nr_pages); |
136 | } | 136 | } |
137 | |||
138 | #ifdef CONFIG_MEMORY_HOTREMOVE | ||
139 | int remove_memory(u64 start, u64 size) | ||
140 | { | ||
141 | unsigned long start_pfn, end_pfn; | ||
142 | int ret; | ||
143 | |||
144 | start_pfn = start >> PAGE_SHIFT; | ||
145 | end_pfn = start_pfn + (size >> PAGE_SHIFT); | ||
146 | ret = offline_pages(start_pfn, end_pfn, 120 * HZ); | ||
147 | if (ret) | ||
148 | goto out; | ||
149 | /* Arch-specific calls go here - next patch */ | ||
150 | out: | ||
151 | return ret; | ||
152 | } | ||
153 | #endif /* CONFIG_MEMORY_HOTREMOVE */ | ||
154 | #endif /* CONFIG_MEMORY_HOTPLUG */ | 137 | #endif /* CONFIG_MEMORY_HOTPLUG */ |
155 | 138 | ||
156 | /* | 139 | /* |
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index 1169130a97ef..158b0d6d7046 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c | |||
@@ -189,14 +189,3 @@ int arch_add_memory(int nid, u64 start, u64 size) | |||
189 | return rc; | 189 | return rc; |
190 | } | 190 | } |
191 | #endif /* CONFIG_MEMORY_HOTPLUG */ | 191 | #endif /* CONFIG_MEMORY_HOTPLUG */ |
192 | |||
193 | #ifdef CONFIG_MEMORY_HOTREMOVE | ||
194 | int remove_memory(u64 start, u64 size) | ||
195 | { | ||
196 | unsigned long start_pfn, end_pfn; | ||
197 | |||
198 | start_pfn = PFN_DOWN(start); | ||
199 | end_pfn = start_pfn + PFN_DOWN(size); | ||
200 | return offline_pages(start_pfn, end_pfn, 120 * HZ); | ||
201 | } | ||
202 | #endif /* CONFIG_MEMORY_HOTREMOVE */ | ||
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 89fee2dcb039..c299d083d8e2 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/delay.h> | 26 | #include <linux/delay.h> |
27 | #include <linux/migrate.h> | 27 | #include <linux/migrate.h> |
28 | #include <linux/page-isolation.h> | 28 | #include <linux/page-isolation.h> |
29 | #include <linux/pfn.h> | ||
29 | 30 | ||
30 | #include <asm/tlbflush.h> | 31 | #include <asm/tlbflush.h> |
31 | 32 | ||
@@ -849,10 +850,19 @@ failed_removal: | |||
849 | 850 | ||
850 | return ret; | 851 | return ret; |
851 | } | 852 | } |
853 | |||
854 | int remove_memory(u64 start, u64 size) | ||
855 | { | ||
856 | unsigned long start_pfn, end_pfn; | ||
857 | |||
858 | start_pfn = PFN_DOWN(start); | ||
859 | end_pfn = start_pfn + PFN_DOWN(size); | ||
860 | return offline_pages(start_pfn, end_pfn, 120 * HZ); | ||
861 | } | ||
852 | #else | 862 | #else |
853 | int remove_memory(u64 start, u64 size) | 863 | int remove_memory(u64 start, u64 size) |
854 | { | 864 | { |
855 | return -EINVAL; | 865 | return -EINVAL; |
856 | } | 866 | } |
857 | EXPORT_SYMBOL_GPL(remove_memory); | ||
858 | #endif /* CONFIG_MEMORY_HOTREMOVE */ | 867 | #endif /* CONFIG_MEMORY_HOTREMOVE */ |
868 | EXPORT_SYMBOL_GPL(remove_memory); | ||