void __init mem_init(void) { int i; #ifndef __tilegx__ void *last; #endif #ifdef CONFIG_FLATMEM BUG_ON(!mem_map); #endif #ifdef CONFIG_HIGHMEM /* check that fixmap and pkmap do not overlap */ if (PKMAP_ADDR(LAST_PKMAP-1) >= FIXADDR_START) { pr_err("fixmap and kmap areas overlap - this will crash\n"); pr_err("pkstart: %lxh pkend: %lxh fixstart %lxh\n", PKMAP_BASE, PKMAP_ADDR(LAST_PKMAP-1), FIXADDR_START); BUG(); } #endif set_max_mapnr_init(); /* this will put all bootmem onto the freelists */ free_all_bootmem(); #ifndef CONFIG_64BIT /* count all remaining LOWMEM and give all HIGHMEM to page allocator */ set_non_bootmem_pages_init(); #endif mem_init_print_info(NULL); /* * In debug mode, dump some interesting memory mappings. */ #ifdef CONFIG_HIGHMEM printk(KERN_DEBUG " KMAP %#lx - %#lx\n", FIXADDR_START, FIXADDR_TOP + PAGE_SIZE - 1); printk(KERN_DEBUG " PKMAP %#lx - %#lx\n", PKMAP_BASE, PKMAP_ADDR(LAST_PKMAP) - 1); #endif printk(KERN_DEBUG " VMALLOC %#lx - %#lx\n", _VMALLOC_START, _VMALLOC_END - 1); #ifdef __tilegx__ for (i = MAX_NUMNODES-1; i >= 0; --i) { struct pglist_data *node = &node_data[i]; if (node->node_present_pages) { unsigned long start = (unsigned long) pfn_to_kaddr(node->node_start_pfn); unsigned long end = start + (node->node_present_pages << PAGE_SHIFT); printk(KERN_DEBUG " MEM%d %#lx - %#lx\n", i, start, end - 1); } } #else last =
void __init mem_init(void) { int codesize, datasize, initsize; int i; #ifndef __tilegx__ void *last; #endif #ifdef CONFIG_FLATMEM BUG_ON(!mem_map); #endif #ifdef CONFIG_HIGHMEM /* check that fixmap and pkmap do not overlap */ if (PKMAP_ADDR(LAST_PKMAP-1) >= FIXADDR_START) { pr_err("fixmap and kmap areas overlap" " - this will crash\n"); pr_err("pkstart: %lxh pkend: %lxh fixstart %lxh\n", PKMAP_BASE, PKMAP_ADDR(LAST_PKMAP-1), FIXADDR_START); BUG(); } #endif set_max_mapnr_init(); /* this will put all bootmem onto the freelists */ totalram_pages += free_all_bootmem(); #ifndef CONFIG_64BIT /* count all remaining LOWMEM and give all HIGHMEM to page allocator */ set_non_bootmem_pages_init(); #endif codesize = (unsigned long)&_etext - (unsigned long)&_text; datasize = (unsigned long)&_end - (unsigned long)&_sdata; initsize = (unsigned long)&_einittext - (unsigned long)&_sinittext; initsize += (unsigned long)&_einitdata - (unsigned long)&_sinitdata; pr_info("Memory: %luk/%luk available (%dk kernel code, %dk data, %dk init, %ldk highmem)\n", (unsigned long) nr_free_pages() << (PAGE_SHIFT-10), num_physpages << (PAGE_SHIFT-10), codesize >> 10, datasize >> 10, initsize >> 10, (unsigned long) (totalhigh_pages << (PAGE_SHIFT-10)) ); /* * In debug mode, dump some interesting memory mappings. */ #ifdef CONFIG_HIGHMEM printk(KERN_DEBUG " KMAP %#lx - %#lx\n", FIXADDR_START, FIXADDR_TOP + PAGE_SIZE - 1); printk(KERN_DEBUG " PKMAP %#lx - %#lx\n", PKMAP_BASE, PKMAP_ADDR(LAST_PKMAP) - 1); #endif #ifdef CONFIG_HUGEVMAP printk(KERN_DEBUG " HUGEMAP %#lx - %#lx\n", HUGE_VMAP_BASE, HUGE_VMAP_END - 1); #endif printk(KERN_DEBUG " VMALLOC %#lx - %#lx\n", _VMALLOC_START, _VMALLOC_END - 1); #ifdef __tilegx__ for (i = MAX_NUMNODES-1; i >= 0; --i) { struct pglist_data *node = &node_data[i]; if (node->node_present_pages) { unsigned long start = (unsigned long) pfn_to_kaddr(node->node_start_pfn); unsigned long end = start + (node->node_present_pages << PAGE_SHIFT); printk(KERN_DEBUG " MEM%d %#lx - %#lx\n", i, start, end - 1); } } #else last = high_memory; for (i = MAX_NUMNODES-1; i >= 0; --i) { if ((unsigned long)vbase_map[i] != -1UL) { printk(KERN_DEBUG " LOWMEM%d %#lx - %#lx\n", i, (unsigned long) (vbase_map[i]), (unsigned long) (last-1)); last = vbase_map[i]; } } #endif #ifndef __tilegx__ /* * Convert from using one lock for all atomic operations to * one per cpu. */ __init_atomic_per_cpu(); #endif }