diff options
Diffstat (limited to 'arch/mips/sgi-ip27/ip27-memory.c')
| -rw-r--r-- | arch/mips/sgi-ip27/ip27-memory.c | 71 | 
1 files changed, 23 insertions, 48 deletions
diff --git a/arch/mips/sgi-ip27/ip27-memory.c b/arch/mips/sgi-ip27/ip27-memory.c index bc1297109cc..a95c00f5fb9 100644 --- a/arch/mips/sgi-ip27/ip27-memory.c +++ b/arch/mips/sgi-ip27/ip27-memory.c @@ -12,6 +12,7 @@   */  #include <linux/init.h>  #include <linux/kernel.h> +#include <linux/memblock.h>  #include <linux/mm.h>  #include <linux/mmzone.h>  #include <linux/module.h> @@ -30,8 +31,8 @@  #include <asm/sn/sn_private.h> -#define SLOT_PFNSHIFT           (SLOT_SHIFT - PAGE_SHIFT) -#define PFN_NASIDSHFT           (NASID_SHFT - PAGE_SHIFT) +#define SLOT_PFNSHIFT		(SLOT_SHIFT - PAGE_SHIFT) +#define PFN_NASIDSHFT		(NASID_SHFT - PAGE_SHIFT)  struct node_data *__node_data[MAX_COMPACT_NODES]; @@ -42,7 +43,7 @@ static int fine_mode;  static int is_fine_dirmode(void)  {  	return (((LOCAL_HUB_L(NI_STATUS_REV_ID) & NSRI_REGIONSIZE_MASK) -	        >> NSRI_REGIONSIZE_SHFT) & REGIONSIZE_FINE); +		>> NSRI_REGIONSIZE_SHFT) & REGIONSIZE_FINE);  }  static hubreg_t get_region(cnodeid_t cnode) @@ -65,7 +66,7 @@ static void gen_region_mask(hubreg_t *region_mask)  	}  } -#define	rou_rflag	rou_flags +#define rou_rflag	rou_flags  static int router_distance; @@ -254,14 +255,14 @@ static void __init dump_topology(void)  	}  } -static pfn_t __init slot_getbasepfn(cnodeid_t cnode, int slot) +static unsigned long __init slot_getbasepfn(cnodeid_t cnode, int slot)  {  	nasid_t nasid = COMPACT_TO_NASID_NODEID(cnode); -	return ((pfn_t)nasid << PFN_NASIDSHFT) | (slot << SLOT_PFNSHIFT); +	return ((unsigned long)nasid << PFN_NASIDSHFT) | (slot << SLOT_PFNSHIFT);  } -static pfn_t __init slot_psize_compute(cnodeid_t node, int slot) +static unsigned long __init slot_psize_compute(cnodeid_t node, int slot)  {  	nasid_t nasid;  	lboard_t *brd; @@ -352,12 +353,10 @@ static void __init mlreset(void)  static void __init szmem(void)  { -	pfn_t slot_psize, slot0sz = 0, nodebytes;	/* Hack to detect problem configs */ +	unsigned long slot_psize, slot0sz = 0, nodebytes;	/* Hack to detect problem configs */  	int slot;  	cnodeid_t node; -	num_physpages = 0; -  	for_each_online_node(node) {  		nodebytes = 0;  		for (slot = 0; slot < MAX_MEM_SLOTS; slot++) { @@ -380,19 +379,18 @@ static void __init szmem(void)  				slot = MAX_MEM_SLOTS;  				continue;  			} -			num_physpages += slot_psize; -			add_active_range(node, slot_getbasepfn(node, slot), -					 slot_getbasepfn(node, slot) + slot_psize); +			memblock_add_node(PFN_PHYS(slot_getbasepfn(node, slot)), +					  PFN_PHYS(slot_psize), node);  		}  	}  }  static void __init node_mem_init(cnodeid_t node)  { -	pfn_t slot_firstpfn = slot_getbasepfn(node, 0); -	pfn_t slot_freepfn = node_getfirstfree(node); +	unsigned long slot_firstpfn = slot_getbasepfn(node, 0); +	unsigned long slot_freepfn = node_getfirstfree(node);  	unsigned long bootmap_size; -	pfn_t start_pfn, end_pfn; +	unsigned long start_pfn, end_pfn;  	get_pfn_range_for_nid(node, &start_pfn, &end_pfn); @@ -400,6 +398,7 @@ static void __init node_mem_init(cnodeid_t node)  	 * Allocate the node data structures on the node first.  	 */  	__node_data[node] = __va(slot_freepfn << PAGE_SHIFT); +	memset(__node_data[node], 0, PAGE_SIZE);  	NODE_DATA(node)->bdata = &bootmem_node_data[node];  	NODE_DATA(node)->node_start_pfn = start_pfn; @@ -410,7 +409,7 @@ static void __init node_mem_init(cnodeid_t node)  	slot_freepfn += PFN_UP(sizeof(struct pglist_data) +  			       sizeof(struct hub_data)); -  	bootmap_size = init_bootmem_node(NODE_DATA(node), slot_freepfn, +	bootmap_size = init_bootmem_node(NODE_DATA(node), slot_freepfn,  					start_pfn, end_pfn);  	free_bootmem_with_active_regions(node, end_pfn);  	reserve_bootmem_node(NODE_DATA(node), slot_firstpfn << PAGE_SHIFT, @@ -420,7 +419,7 @@ static void __init node_mem_init(cnodeid_t node)  }  /* - * A node with nothing.  We use it to avoid any special casing in + * A node with nothing.	 We use it to avoid any special casing in   * cpumask_of_node   */  static struct node_data null_node = { @@ -455,7 +454,7 @@ void __init prom_free_prom_memory(void)  	/* We got nothing to free here ...  */  } -extern unsigned long setup_zero_pages(void); +extern void setup_zero_pages(void);  void __init paging_init(void)  { @@ -465,7 +464,7 @@ void __init paging_init(void)  	pagetable_init();  	for_each_online_node(node) { -		pfn_t start_pfn, end_pfn; +		unsigned long start_pfn, end_pfn;  		get_pfn_range_for_nid(node, &start_pfn, &end_pfn); @@ -478,32 +477,8 @@ void __init paging_init(void)  void __init mem_init(void)  { -	unsigned long codesize, datasize, initsize, tmp; -	unsigned node; - -	high_memory = (void *) __va(num_physpages << PAGE_SHIFT); - -	for_each_online_node(node) { -		/* -		 * This will free up the bootmem, ie, slot 0 memory. -		 */ -		totalram_pages += free_all_bootmem_node(NODE_DATA(node)); -	} - -	totalram_pages -= setup_zero_pages();	/* This comes from node 0 */ - -	codesize =  (unsigned long) &_etext - (unsigned long) &_text; -	datasize =  (unsigned long) &_edata - (unsigned long) &_etext; -	initsize =  (unsigned long) &__init_end - (unsigned long) &__init_begin; - -	tmp = nr_free_pages(); -	printk(KERN_INFO "Memory: %luk/%luk available (%ldk kernel code, " -	       "%ldk reserved, %ldk data, %ldk init, %ldk highmem)\n", -	       tmp << (PAGE_SHIFT-10), -	       num_physpages << (PAGE_SHIFT-10), -	       codesize >> 10, -	       (num_physpages - tmp) << (PAGE_SHIFT-10), -	       datasize >> 10, -	       initsize >> 10, -	       totalhigh_pages << (PAGE_SHIFT-10)); +	high_memory = (void *) __va(get_num_physpages() << PAGE_SHIFT); +	free_all_bootmem(); +	setup_zero_pages();	/* This comes from node 0 */ +	mem_init_print_info(NULL);  }  | 
