diff options
author | KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> | 2007-10-16 04:26:14 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-10-16 12:43:02 -0400 |
commit | 48e94196a533dbee17c252bf80d0310fb8c8c2eb (patch) | |
tree | 9b29060b0e2600dc7da645fd436dc94c25d1fb36 /arch/powerpc/mm | |
parent | de33b821f34dc9e2fabf81a8ba464f3ef039bd00 (diff) |
fix memory hot remove not configured case.
Now, arch dependent code around CONFIG_MEMORY_HOTREMOVE is a mess.
This patch cleans up them. This is against 2.6.23-rc6-mm1.
- fix compile failure on ia64/ CONFIG_MEMORY_HOTPLUG && !CONFIG_MEMORY_HOTREMOVE case.
- For !CONFIG_MEMORY_HOTREMOVE, add generic no-op remove_memory(),
which returns -EINVAL.
- removed remove_pages() only used in powerpc.
- removed no-op remove_memory() in i386, sh, sparc64, x86_64.
- only powerpc returns -ENOSYS at memory hot remove(no-op). changes it
to return -EINVAL.
Note:
Currently, only ia64 supports CONFIG_MEMORY_HOTREMOVE. I welcome other
archs if there are requirements and testers.
Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/powerpc/mm')
-rw-r--r-- | arch/powerpc/mm/mem.c | 45 |
1 files changed, 0 insertions, 45 deletions
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c index 32dcfc9b0082..81eb96ec13b2 100644 --- a/arch/powerpc/mm/mem.c +++ b/arch/powerpc/mm/mem.c | |||
@@ -129,51 +129,6 @@ int __devinit arch_add_memory(int nid, u64 start, u64 size) | |||
129 | return __add_pages(zone, start_pfn, nr_pages); | 129 | return __add_pages(zone, start_pfn, nr_pages); |
130 | } | 130 | } |
131 | 131 | ||
132 | /* | ||
133 | * First pass at this code will check to determine if the remove | ||
134 | * request is within the RMO. Do not allow removal within the RMO. | ||
135 | */ | ||
136 | int __devinit remove_memory(u64 start, u64 size) | ||
137 | { | ||
138 | struct zone *zone; | ||
139 | unsigned long start_pfn, end_pfn, nr_pages; | ||
140 | |||
141 | start_pfn = start >> PAGE_SHIFT; | ||
142 | nr_pages = size >> PAGE_SHIFT; | ||
143 | end_pfn = start_pfn + nr_pages; | ||
144 | |||
145 | printk("%s(): Attempting to remove memoy in range " | ||
146 | "%lx to %lx\n", __func__, start, start+size); | ||
147 | /* | ||
148 | * check for range within RMO | ||
149 | */ | ||
150 | zone = page_zone(pfn_to_page(start_pfn)); | ||
151 | |||
152 | printk("%s(): memory will be removed from " | ||
153 | "the %s zone\n", __func__, zone->name); | ||
154 | |||
155 | /* | ||
156 | * not handling removing memory ranges that | ||
157 | * overlap multiple zones yet | ||
158 | */ | ||
159 | if (end_pfn > (zone->zone_start_pfn + zone->spanned_pages)) | ||
160 | goto overlap; | ||
161 | |||
162 | /* make sure it is NOT in RMO */ | ||
163 | if ((start < lmb.rmo_size) || ((start+size) < lmb.rmo_size)) { | ||
164 | printk("%s(): range to be removed must NOT be in RMO!\n", | ||
165 | __func__); | ||
166 | goto in_rmo; | ||
167 | } | ||
168 | |||
169 | return __remove_pages(zone, start_pfn, nr_pages); | ||
170 | |||
171 | overlap: | ||
172 | printk("%s(): memory range to be removed overlaps " | ||
173 | "multiple zones!!!\n", __func__); | ||
174 | in_rmo: | ||
175 | return -1; | ||
176 | } | ||
177 | #endif /* CONFIG_MEMORY_HOTPLUG */ | 132 | #endif /* CONFIG_MEMORY_HOTPLUG */ |
178 | 133 | ||
179 | void show_mem(void) | 134 | void show_mem(void) |