diff options
Diffstat (limited to 'arch/sh/mm/init.c')
| -rw-r--r-- | arch/sh/mm/init.c | 43 | 
1 files changed, 20 insertions, 23 deletions
diff --git a/arch/sh/mm/init.c b/arch/sh/mm/init.c index 82cc576fab1..20f9ead650d 100644 --- a/arch/sh/mm/init.c +++ b/arch/sh/mm/init.c @@ -417,15 +417,13 @@ void __init mem_init(void)  	for_each_online_node(nid) {  		pg_data_t *pgdat = NODE_DATA(nid); -		unsigned long node_pages = 0;  		void *node_high_memory;  		num_physpages += pgdat->node_present_pages;  		if (pgdat->node_spanned_pages) -			node_pages = free_all_bootmem_node(pgdat); +			totalram_pages += free_all_bootmem_node(pgdat); -		totalram_pages += node_pages;  		node_high_memory = (void *)__va((pgdat->node_start_pfn +  						 pgdat->node_spanned_pages) << @@ -501,31 +499,13 @@ void __init mem_init(void)  void free_initmem(void)  { -	unsigned long addr; - -	addr = (unsigned long)(&__init_begin); -	for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) { -		ClearPageReserved(virt_to_page(addr)); -		init_page_count(virt_to_page(addr)); -		free_page(addr); -		totalram_pages++; -	} -	printk("Freeing unused kernel memory: %ldk freed\n", -	       ((unsigned long)&__init_end - -	        (unsigned long)&__init_begin) >> 10); +	free_initmem_default(0);  }  #ifdef CONFIG_BLK_DEV_INITRD  void free_initrd_mem(unsigned long start, unsigned long end)  { -	unsigned long p; -	for (p = start; p < end; p += PAGE_SIZE) { -		ClearPageReserved(virt_to_page(p)); -		init_page_count(virt_to_page(p)); -		free_page(p); -		totalram_pages++; -	} -	printk("Freeing initrd memory: %ldk freed\n", (end - start) >> 10); +	free_reserved_area(start, end, 0, "initrd");  }  #endif @@ -558,4 +538,21 @@ int memory_add_physaddr_to_nid(u64 addr)  EXPORT_SYMBOL_GPL(memory_add_physaddr_to_nid);  #endif +#ifdef CONFIG_MEMORY_HOTREMOVE +int arch_remove_memory(u64 start, u64 size) +{ +	unsigned long start_pfn = start >> PAGE_SHIFT; +	unsigned long nr_pages = size >> PAGE_SHIFT; +	struct zone *zone; +	int ret; + +	zone = page_zone(pfn_to_page(start_pfn)); +	ret = __remove_pages(zone, start_pfn, nr_pages); +	if (unlikely(ret)) +		pr_warn("%s: Failed, __remove_pages() == %d\n", __func__, +			ret); + +	return ret; +} +#endif  #endif /* CONFIG_MEMORY_HOTPLUG */  |