aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/ia64/mm/init.c9
-rw-r--r--arch/powerpc/mm/mem.c9
-rw-r--r--arch/sh/mm/init.c9
-rw-r--r--arch/x86/mm/init_32.c36
-rw-r--r--arch/x86/mm/init_64.c9
-rw-r--r--mm/memory_hotplug.c19
6 files changed, 22 insertions, 69 deletions
diff --git a/arch/ia64/mm/init.c b/arch/ia64/mm/init.c
index 5c1de53c8c1c..fc6c6636ffda 100644
--- a/arch/ia64/mm/init.c
+++ b/arch/ia64/mm/init.c
@@ -682,15 +682,6 @@ mem_init (void)
682} 682}
683 683
684#ifdef CONFIG_MEMORY_HOTPLUG 684#ifdef CONFIG_MEMORY_HOTPLUG
685void online_page(struct page *page)
686{
687 ClearPageReserved(page);
688 init_page_count(page);
689 __free_page(page);
690 totalram_pages++;
691 num_physpages++;
692}
693
694int arch_add_memory(int nid, u64 start, u64 size) 685int arch_add_memory(int nid, u64 start, u64 size)
695{ 686{
696 pg_data_t *pgdat; 687 pg_data_t *pgdat;
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index 5ccb579b81e4..d9e37f365b54 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -110,15 +110,6 @@ EXPORT_SYMBOL(phys_mem_access_prot);
110 110
111#ifdef CONFIG_MEMORY_HOTPLUG 111#ifdef CONFIG_MEMORY_HOTPLUG
112 112
113void online_page(struct page *page)
114{
115 ClearPageReserved(page);
116 init_page_count(page);
117 __free_page(page);
118 totalram_pages++;
119 num_physpages++;
120}
121
122#ifdef CONFIG_NUMA 113#ifdef CONFIG_NUMA
123int memory_add_physaddr_to_nid(u64 start) 114int memory_add_physaddr_to_nid(u64 start)
124{ 115{
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c
index 53dde0607362..d7df26bd1e54 100644
--- a/arch/sh/mm/init.c
+++ b/arch/sh/mm/init.c
@@ -307,15 +307,6 @@ void free_initrd_mem(unsigned long start, unsigned long end)
307#endif 307#endif
308 308
309#ifdef CONFIG_MEMORY_HOTPLUG 309#ifdef CONFIG_MEMORY_HOTPLUG
310void online_page(struct page *page)
311{
312 ClearPageReserved(page);
313 init_page_count(page);
314 __free_page(page);
315 totalram_pages++;
316 num_physpages++;
317}
318
319int arch_add_memory(int nid, u64 start, u64 size) 310int arch_add_memory(int nid, u64 start, u64 size)
320{ 311{
321 pg_data_t *pgdat; 312 pg_data_t *pgdat;
diff --git a/arch/x86/mm/init_32.c b/arch/x86/mm/init_32.c
index 4a4761892951..de236e419cb5 100644
--- a/arch/x86/mm/init_32.c
+++ b/arch/x86/mm/init_32.c
@@ -287,47 +287,17 @@ static void __init permanent_kmaps_init(pgd_t *pgd_base)
287 pkmap_page_table = pte; 287 pkmap_page_table = pte;
288} 288}
289 289
290static void __meminit free_new_highpage(struct page *page)
291{
292 init_page_count(page);
293 __free_page(page);
294 totalhigh_pages++;
295}
296
297void __init add_one_highpage_init(struct page *page, int pfn, int bad_ppro) 290void __init add_one_highpage_init(struct page *page, int pfn, int bad_ppro)
298{ 291{
299 if (page_is_ram(pfn) && !(bad_ppro && page_kills_ppro(pfn))) { 292 if (page_is_ram(pfn) && !(bad_ppro && page_kills_ppro(pfn))) {
300 ClearPageReserved(page); 293 ClearPageReserved(page);
301 free_new_highpage(page); 294 init_page_count(page);
295 __free_page(page);
296 totalhigh_pages++;
302 } else 297 } else
303 SetPageReserved(page); 298 SetPageReserved(page);
304} 299}
305 300
306static int __meminit
307add_one_highpage_hotplug(struct page *page, unsigned long pfn)
308{
309 free_new_highpage(page);
310 totalram_pages++;
311#ifdef CONFIG_FLATMEM
312 max_mapnr = max(pfn, max_mapnr);
313#endif
314 num_physpages++;
315
316 return 0;
317}
318
319/*
320 * Not currently handling the NUMA case.
321 * Assuming single node and all memory that
322 * has been added dynamically that would be
323 * onlined here is in HIGHMEM.
324 */
325void __meminit online_page(struct page *page)
326{
327 ClearPageReserved(page);
328 add_one_highpage_hotplug(page, page_to_pfn(page));
329}
330
331#ifndef CONFIG_NUMA 301#ifndef CONFIG_NUMA
332static void __init set_highmem_pages_init(int bad_ppro) 302static void __init set_highmem_pages_init(int bad_ppro)
333{ 303{
diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c
index 5fbb8652cf59..32ba13b0f818 100644
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -620,15 +620,6 @@ void __init paging_init(void)
620/* 620/*
621 * Memory hotplug specific functions 621 * Memory hotplug specific functions
622 */ 622 */
623void online_page(struct page *page)
624{
625 ClearPageReserved(page);
626 init_page_count(page);
627 __free_page(page);
628 totalram_pages++;
629 num_physpages++;
630}
631
632#ifdef CONFIG_MEMORY_HOTPLUG 623#ifdef CONFIG_MEMORY_HOTPLUG
633/* 624/*
634 * Memory is added always to NORMAL zone. This means you will never get 625 * Memory is added always to NORMAL zone. This means you will never get
diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c
index d5094929766d..c8b3ca79de2d 100644
--- a/mm/memory_hotplug.c
+++ b/mm/memory_hotplug.c
@@ -219,6 +219,25 @@ static void grow_pgdat_span(struct pglist_data *pgdat,
219 pgdat->node_start_pfn; 219 pgdat->node_start_pfn;
220} 220}
221 221
222void online_page(struct page *page)
223{
224 totalram_pages++;
225 num_physpages++;
226
227#ifdef CONFIG_HIGHMEM
228 if (PageHighMem(page))
229 totalhigh_pages++;
230#endif
231
232#ifdef CONFIG_FLATMEM
233 max_mapnr = max(page_to_pfn(page), max_mapnr);
234#endif
235
236 ClearPageReserved(page);
237 init_page_count(page);
238 __free_page(page);
239}
240
222static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages, 241static int online_pages_range(unsigned long start_pfn, unsigned long nr_pages,
223 void *arg) 242 void *arg)
224{ 243{