diff options
Diffstat (limited to 'arch/s390/mm/init.c')
| -rw-r--r-- | arch/s390/mm/init.c | 33 | 
1 files changed, 17 insertions, 16 deletions
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index 76564795222..d5865e4024c 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c @@ -143,33 +143,34 @@ void kernel_map_pages(struct page *page, int numpages, int enable)  }  #endif -void free_initmem(void) +void free_init_pages(char *what, unsigned long begin, unsigned long end)  { -        unsigned long addr; +	unsigned long addr = begin; -        addr = (unsigned long)(&__init_begin); -        for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) { +	if (begin >= end) +		return; +	for (; addr < end; addr += PAGE_SIZE) {  		ClearPageReserved(virt_to_page(addr));  		init_page_count(virt_to_page(addr)); -		memset((void *)addr, POISON_FREE_INITMEM, PAGE_SIZE); +		memset((void *)(addr & PAGE_MASK), POISON_FREE_INITMEM, +		       PAGE_SIZE);  		free_page(addr);  		totalram_pages++; -        } -        printk ("Freeing unused kernel memory: %ldk freed\n", -		((unsigned long)&__init_end - (unsigned long)&__init_begin) >> 10); +	} +	printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10); +} + +void free_initmem(void) +{ +	free_init_pages("unused kernel memory", +			(unsigned long)&__init_begin, +			(unsigned long)&__init_end);  }  #ifdef CONFIG_BLK_DEV_INITRD  void free_initrd_mem(unsigned long start, unsigned long end)  { -        if (start < end) -                printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10); -        for (; start < end; start += PAGE_SIZE) { -                ClearPageReserved(virt_to_page(start)); -                init_page_count(virt_to_page(start)); -                free_page(start); -                totalram_pages++; -        } +	free_init_pages("initrd memory", start, end);  }  #endif  |