aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/mm/mem.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/powerpc/mm/mem.c')
-rw-r--r--arch/powerpc/mm/mem.c21
1 files changed, 11 insertions, 10 deletions
diff --git a/arch/powerpc/mm/mem.c b/arch/powerpc/mm/mem.c
index be5c506779a7..16def4dcff6d 100644
--- a/arch/powerpc/mm/mem.c
+++ b/arch/powerpc/mm/mem.c
@@ -31,6 +31,7 @@
31#include <linux/initrd.h> 31#include <linux/initrd.h>
32#include <linux/pagemap.h> 32#include <linux/pagemap.h>
33#include <linux/suspend.h> 33#include <linux/suspend.h>
34#include <linux/lmb.h>
34 35
35#include <asm/pgalloc.h> 36#include <asm/pgalloc.h>
36#include <asm/prom.h> 37#include <asm/prom.h>
@@ -42,7 +43,6 @@
42#include <asm/machdep.h> 43#include <asm/machdep.h>
43#include <asm/btext.h> 44#include <asm/btext.h>
44#include <asm/tlb.h> 45#include <asm/tlb.h>
45#include <asm/lmb.h>
46#include <asm/sections.h> 46#include <asm/sections.h>
47#include <asm/vdso.h> 47#include <asm/vdso.h>
48 48
@@ -111,7 +111,7 @@ int memory_add_physaddr_to_nid(u64 start)
111} 111}
112#endif 112#endif
113 113
114int __devinit arch_add_memory(int nid, u64 start, u64 size) 114int arch_add_memory(int nid, u64 start, u64 size)
115{ 115{
116 struct pglist_data *pgdata; 116 struct pglist_data *pgdata;
117 struct zone *zone; 117 struct zone *zone;
@@ -175,7 +175,6 @@ void show_mem(void)
175 175
176 printk("Mem-info:\n"); 176 printk("Mem-info:\n");
177 show_free_areas(); 177 show_free_areas();
178 printk("Free swap: %6ldkB\n", nr_swap_pages<<(PAGE_SHIFT-10));
179 for_each_online_pgdat(pgdat) { 178 for_each_online_pgdat(pgdat) {
180 unsigned long flags; 179 unsigned long flags;
181 pgdat_resize_lock(pgdat, &flags); 180 pgdat_resize_lock(pgdat, &flags);
@@ -217,9 +216,11 @@ void __init do_init_bootmem(void)
217 unsigned long total_pages; 216 unsigned long total_pages;
218 int boot_mapsize; 217 int boot_mapsize;
219 218
220 max_pfn = total_pages = lmb_end_of_DRAM() >> PAGE_SHIFT; 219 max_pfn = lmb_end_of_DRAM() >> PAGE_SHIFT;
220 total_pages = (lmb_end_of_DRAM() - memstart_addr) >> PAGE_SHIFT;
221#ifdef CONFIG_HIGHMEM 221#ifdef CONFIG_HIGHMEM
222 total_pages = total_lowmem >> PAGE_SHIFT; 222 total_pages = total_lowmem >> PAGE_SHIFT;
223 max_low_pfn = lowmem_end_addr >> PAGE_SHIFT;
223#endif 224#endif
224 225
225 /* 226 /*
@@ -245,18 +246,18 @@ void __init do_init_bootmem(void)
245 * present. 246 * present.
246 */ 247 */
247#ifdef CONFIG_HIGHMEM 248#ifdef CONFIG_HIGHMEM
248 free_bootmem_with_active_regions(0, total_lowmem >> PAGE_SHIFT); 249 free_bootmem_with_active_regions(0, lowmem_end_addr >> PAGE_SHIFT);
249 250
250 /* reserve the sections we're already using */ 251 /* reserve the sections we're already using */
251 for (i = 0; i < lmb.reserved.cnt; i++) { 252 for (i = 0; i < lmb.reserved.cnt; i++) {
252 unsigned long addr = lmb.reserved.region[i].base + 253 unsigned long addr = lmb.reserved.region[i].base +
253 lmb_size_bytes(&lmb.reserved, i) - 1; 254 lmb_size_bytes(&lmb.reserved, i) - 1;
254 if (addr < total_lowmem) 255 if (addr < lowmem_end_addr)
255 reserve_bootmem(lmb.reserved.region[i].base, 256 reserve_bootmem(lmb.reserved.region[i].base,
256 lmb_size_bytes(&lmb.reserved, i), 257 lmb_size_bytes(&lmb.reserved, i),
257 BOOTMEM_DEFAULT); 258 BOOTMEM_DEFAULT);
258 else if (lmb.reserved.region[i].base < total_lowmem) { 259 else if (lmb.reserved.region[i].base < lowmem_end_addr) {
259 unsigned long adjusted_size = total_lowmem - 260 unsigned long adjusted_size = lowmem_end_addr -
260 lmb.reserved.region[i].base; 261 lmb.reserved.region[i].base;
261 reserve_bootmem(lmb.reserved.region[i].base, 262 reserve_bootmem(lmb.reserved.region[i].base,
262 adjusted_size, BOOTMEM_DEFAULT); 263 adjusted_size, BOOTMEM_DEFAULT);
@@ -326,7 +327,7 @@ void __init paging_init(void)
326 (top_of_ram - total_ram) >> 20); 327 (top_of_ram - total_ram) >> 20);
327 memset(max_zone_pfns, 0, sizeof(max_zone_pfns)); 328 memset(max_zone_pfns, 0, sizeof(max_zone_pfns));
328#ifdef CONFIG_HIGHMEM 329#ifdef CONFIG_HIGHMEM
329 max_zone_pfns[ZONE_DMA] = total_lowmem >> PAGE_SHIFT; 330 max_zone_pfns[ZONE_DMA] = lowmem_end_addr >> PAGE_SHIFT;
330 max_zone_pfns[ZONE_HIGHMEM] = top_of_ram >> PAGE_SHIFT; 331 max_zone_pfns[ZONE_HIGHMEM] = top_of_ram >> PAGE_SHIFT;
331#else 332#else
332 max_zone_pfns[ZONE_DMA] = top_of_ram >> PAGE_SHIFT; 333 max_zone_pfns[ZONE_DMA] = top_of_ram >> PAGE_SHIFT;
@@ -381,7 +382,7 @@ void __init mem_init(void)
381 { 382 {
382 unsigned long pfn, highmem_mapnr; 383 unsigned long pfn, highmem_mapnr;
383 384
384 highmem_mapnr = total_lowmem >> PAGE_SHIFT; 385 highmem_mapnr = lowmem_end_addr >> PAGE_SHIFT;
385 for (pfn = highmem_mapnr; pfn < max_mapnr; ++pfn) { 386 for (pfn = highmem_mapnr; pfn < max_mapnr; ++pfn) {
386 struct page *page = pfn_to_page(pfn); 387 struct page *page = pfn_to_page(pfn);
387 if (lmb_is_reserved(pfn << PAGE_SHIFT)) 388 if (lmb_is_reserved(pfn << PAGE_SHIFT))