Loading arch/sparc/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ config SPARC64 select IRQ_PREFLOW_FASTEOI select ARCH_HAVE_NMI_SAFE_CMPXCHG select HAVE_C_RECORDMCOUNT select NO_BOOTMEM config ARCH_DEFCONFIG string Loading arch/sparc/mm/init_64.c +7 −84 Original line number Diff line number Diff line Loading @@ -741,7 +741,6 @@ static void __init find_ramdisk(unsigned long phys_base) struct node_mem_mask { unsigned long mask; unsigned long val; unsigned long bootmem_paddr; }; static struct node_mem_mask node_masks[MAX_NUMNODES]; static int num_node_masks; Loading Loading @@ -820,7 +819,7 @@ static u64 memblock_nid_range(u64 start, u64 end, int *nid) */ static void __init allocate_node_data(int nid) { unsigned long paddr, num_pages, start_pfn, end_pfn; unsigned long paddr, start_pfn, end_pfn; struct pglist_data *p; #ifdef CONFIG_NEED_MULTIPLE_NODES Loading @@ -832,7 +831,7 @@ static void __init allocate_node_data(int nid) NODE_DATA(nid) = __va(paddr); memset(NODE_DATA(nid), 0, sizeof(struct pglist_data)); NODE_DATA(nid)->bdata = &bootmem_node_data[nid]; NODE_DATA(nid)->node_id = nid; #endif p = NODE_DATA(nid); Loading @@ -840,18 +839,6 @@ static void __init allocate_node_data(int nid) get_pfn_range_for_nid(nid, &start_pfn, &end_pfn); p->node_start_pfn = start_pfn; p->node_spanned_pages = end_pfn - start_pfn; if (p->node_spanned_pages) { num_pages = bootmem_bootmap_pages(p->node_spanned_pages); paddr = memblock_alloc_try_nid(num_pages << PAGE_SHIFT, PAGE_SIZE, nid); if (!paddr) { prom_printf("Cannot allocate bootmap for nid[%d]\n", nid); prom_halt(); } node_masks[nid].bootmem_paddr = paddr; } } static void init_node_masks_nonnuma(void) Loading Loading @@ -1292,75 +1279,9 @@ static void __init bootmem_init_nonnuma(void) node_set_online(0); } static void __init reserve_range_in_node(int nid, unsigned long start, unsigned long end) { numadbg(" reserve_range_in_node(nid[%d],start[%lx],end[%lx]\n", nid, start, end); while (start < end) { unsigned long this_end; int n; this_end = memblock_nid_range(start, end, &n); if (n == nid) { numadbg(" MATCH reserving range [%lx:%lx]\n", start, this_end); reserve_bootmem_node(NODE_DATA(nid), start, (this_end - start), BOOTMEM_DEFAULT); } else numadbg(" NO MATCH, advancing start to %lx\n", this_end); start = this_end; } } static void __init trim_reserved_in_node(int nid) { struct memblock_region *reg; numadbg(" trim_reserved_in_node(%d)\n", nid); for_each_memblock(reserved, reg) reserve_range_in_node(nid, reg->base, reg->base + reg->size); } static void __init bootmem_init_one_node(int nid) { struct pglist_data *p; numadbg("bootmem_init_one_node(%d)\n", nid); p = NODE_DATA(nid); if (p->node_spanned_pages) { unsigned long paddr = node_masks[nid].bootmem_paddr; unsigned long end_pfn; end_pfn = p->node_start_pfn + p->node_spanned_pages; numadbg(" init_bootmem_node(%d, %lx, %lx, %lx)\n", nid, paddr >> PAGE_SHIFT, p->node_start_pfn, end_pfn); init_bootmem_node(p, paddr >> PAGE_SHIFT, p->node_start_pfn, end_pfn); numadbg(" free_bootmem_with_active_regions(%d, %lx)\n", nid, end_pfn); free_bootmem_with_active_regions(nid, end_pfn); trim_reserved_in_node(nid); numadbg(" sparse_memory_present_with_active_regions(%d)\n", nid); sparse_memory_present_with_active_regions(nid); } } static unsigned long __init bootmem_init(unsigned long phys_base) { unsigned long end_pfn; int nid; end_pfn = memblock_end_of_DRAM() >> PAGE_SHIFT; max_pfn = max_low_pfn = end_pfn; Loading @@ -1369,11 +1290,12 @@ static unsigned long __init bootmem_init(unsigned long phys_base) if (bootmem_init_numa() < 0) bootmem_init_nonnuma(); /* XXX cpu notifier XXX */ /* Dump memblock with node info. */ memblock_dump_all(); for_each_online_node(nid) bootmem_init_one_node(nid); /* XXX cpu notifier XXX */ sparse_memory_present_with_active_regions(MAX_NUMNODES); sparse_init(); return end_pfn; Loading Loading @@ -1973,6 +1895,7 @@ void __init mem_init(void) free_all_bootmem_node(NODE_DATA(i)); } } totalram_pages += free_low_memory_core_early(MAX_NUMNODES); } #else totalram_pages = free_all_bootmem(); Loading Loading
arch/sparc/Kconfig +1 −0 Original line number Diff line number Diff line Loading @@ -61,6 +61,7 @@ config SPARC64 select IRQ_PREFLOW_FASTEOI select ARCH_HAVE_NMI_SAFE_CMPXCHG select HAVE_C_RECORDMCOUNT select NO_BOOTMEM config ARCH_DEFCONFIG string Loading
arch/sparc/mm/init_64.c +7 −84 Original line number Diff line number Diff line Loading @@ -741,7 +741,6 @@ static void __init find_ramdisk(unsigned long phys_base) struct node_mem_mask { unsigned long mask; unsigned long val; unsigned long bootmem_paddr; }; static struct node_mem_mask node_masks[MAX_NUMNODES]; static int num_node_masks; Loading Loading @@ -820,7 +819,7 @@ static u64 memblock_nid_range(u64 start, u64 end, int *nid) */ static void __init allocate_node_data(int nid) { unsigned long paddr, num_pages, start_pfn, end_pfn; unsigned long paddr, start_pfn, end_pfn; struct pglist_data *p; #ifdef CONFIG_NEED_MULTIPLE_NODES Loading @@ -832,7 +831,7 @@ static void __init allocate_node_data(int nid) NODE_DATA(nid) = __va(paddr); memset(NODE_DATA(nid), 0, sizeof(struct pglist_data)); NODE_DATA(nid)->bdata = &bootmem_node_data[nid]; NODE_DATA(nid)->node_id = nid; #endif p = NODE_DATA(nid); Loading @@ -840,18 +839,6 @@ static void __init allocate_node_data(int nid) get_pfn_range_for_nid(nid, &start_pfn, &end_pfn); p->node_start_pfn = start_pfn; p->node_spanned_pages = end_pfn - start_pfn; if (p->node_spanned_pages) { num_pages = bootmem_bootmap_pages(p->node_spanned_pages); paddr = memblock_alloc_try_nid(num_pages << PAGE_SHIFT, PAGE_SIZE, nid); if (!paddr) { prom_printf("Cannot allocate bootmap for nid[%d]\n", nid); prom_halt(); } node_masks[nid].bootmem_paddr = paddr; } } static void init_node_masks_nonnuma(void) Loading Loading @@ -1292,75 +1279,9 @@ static void __init bootmem_init_nonnuma(void) node_set_online(0); } static void __init reserve_range_in_node(int nid, unsigned long start, unsigned long end) { numadbg(" reserve_range_in_node(nid[%d],start[%lx],end[%lx]\n", nid, start, end); while (start < end) { unsigned long this_end; int n; this_end = memblock_nid_range(start, end, &n); if (n == nid) { numadbg(" MATCH reserving range [%lx:%lx]\n", start, this_end); reserve_bootmem_node(NODE_DATA(nid), start, (this_end - start), BOOTMEM_DEFAULT); } else numadbg(" NO MATCH, advancing start to %lx\n", this_end); start = this_end; } } static void __init trim_reserved_in_node(int nid) { struct memblock_region *reg; numadbg(" trim_reserved_in_node(%d)\n", nid); for_each_memblock(reserved, reg) reserve_range_in_node(nid, reg->base, reg->base + reg->size); } static void __init bootmem_init_one_node(int nid) { struct pglist_data *p; numadbg("bootmem_init_one_node(%d)\n", nid); p = NODE_DATA(nid); if (p->node_spanned_pages) { unsigned long paddr = node_masks[nid].bootmem_paddr; unsigned long end_pfn; end_pfn = p->node_start_pfn + p->node_spanned_pages; numadbg(" init_bootmem_node(%d, %lx, %lx, %lx)\n", nid, paddr >> PAGE_SHIFT, p->node_start_pfn, end_pfn); init_bootmem_node(p, paddr >> PAGE_SHIFT, p->node_start_pfn, end_pfn); numadbg(" free_bootmem_with_active_regions(%d, %lx)\n", nid, end_pfn); free_bootmem_with_active_regions(nid, end_pfn); trim_reserved_in_node(nid); numadbg(" sparse_memory_present_with_active_regions(%d)\n", nid); sparse_memory_present_with_active_regions(nid); } } static unsigned long __init bootmem_init(unsigned long phys_base) { unsigned long end_pfn; int nid; end_pfn = memblock_end_of_DRAM() >> PAGE_SHIFT; max_pfn = max_low_pfn = end_pfn; Loading @@ -1369,11 +1290,12 @@ static unsigned long __init bootmem_init(unsigned long phys_base) if (bootmem_init_numa() < 0) bootmem_init_nonnuma(); /* XXX cpu notifier XXX */ /* Dump memblock with node info. */ memblock_dump_all(); for_each_online_node(nid) bootmem_init_one_node(nid); /* XXX cpu notifier XXX */ sparse_memory_present_with_active_regions(MAX_NUMNODES); sparse_init(); return end_pfn; Loading Loading @@ -1973,6 +1895,7 @@ void __init mem_init(void) free_all_bootmem_node(NODE_DATA(i)); } } totalram_pages += free_low_memory_core_early(MAX_NUMNODES); } #else totalram_pages = free_all_bootmem(); Loading