diff options
author | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
---|---|---|
committer | Andrea Bastoni <bastoni@cs.unc.edu> | 2010-05-30 19:16:45 -0400 |
commit | ada47b5fe13d89735805b566185f4885f5a3f750 (patch) | |
tree | 644b88f8a71896307d71438e9b3af49126ffb22b /arch/s390/mm/init.c | |
parent | 43e98717ad40a4ae64545b5ba047c7b86aa44f4f (diff) | |
parent | 3280f21d43ee541f97f8cda5792150d2dbec20d5 (diff) |
Merge branch 'wip-2.6.34' into old-private-masterarchived-private-master
Diffstat (limited to 'arch/s390/mm/init.c')
-rw-r--r-- | arch/s390/mm/init.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/arch/s390/mm/init.c b/arch/s390/mm/init.c index 765647952221..acc91c75bc94 100644 --- a/arch/s390/mm/init.c +++ b/arch/s390/mm/init.c | |||
@@ -26,6 +26,7 @@ | |||
26 | #include <linux/pfn.h> | 26 | #include <linux/pfn.h> |
27 | #include <linux/poison.h> | 27 | #include <linux/poison.h> |
28 | #include <linux/initrd.h> | 28 | #include <linux/initrd.h> |
29 | #include <linux/gfp.h> | ||
29 | #include <asm/processor.h> | 30 | #include <asm/processor.h> |
30 | #include <asm/system.h> | 31 | #include <asm/system.h> |
31 | #include <asm/uaccess.h> | 32 | #include <asm/uaccess.h> |
@@ -143,33 +144,34 @@ void kernel_map_pages(struct page *page, int numpages, int enable) | |||
143 | } | 144 | } |
144 | #endif | 145 | #endif |
145 | 146 | ||
146 | void free_initmem(void) | 147 | void free_init_pages(char *what, unsigned long begin, unsigned long end) |
147 | { | 148 | { |
148 | unsigned long addr; | 149 | unsigned long addr = begin; |
149 | 150 | ||
150 | addr = (unsigned long)(&__init_begin); | 151 | if (begin >= end) |
151 | for (; addr < (unsigned long)(&__init_end); addr += PAGE_SIZE) { | 152 | return; |
153 | for (; addr < end; addr += PAGE_SIZE) { | ||
152 | ClearPageReserved(virt_to_page(addr)); | 154 | ClearPageReserved(virt_to_page(addr)); |
153 | init_page_count(virt_to_page(addr)); | 155 | init_page_count(virt_to_page(addr)); |
154 | memset((void *)addr, POISON_FREE_INITMEM, PAGE_SIZE); | 156 | memset((void *)(addr & PAGE_MASK), POISON_FREE_INITMEM, |
157 | PAGE_SIZE); | ||
155 | free_page(addr); | 158 | free_page(addr); |
156 | totalram_pages++; | 159 | totalram_pages++; |
157 | } | 160 | } |
158 | printk ("Freeing unused kernel memory: %ldk freed\n", | 161 | printk(KERN_INFO "Freeing %s: %luk freed\n", what, (end - begin) >> 10); |
159 | ((unsigned long)&__init_end - (unsigned long)&__init_begin) >> 10); | 162 | } |
163 | |||
164 | void free_initmem(void) | ||
165 | { | ||
166 | free_init_pages("unused kernel memory", | ||
167 | (unsigned long)&__init_begin, | ||
168 | (unsigned long)&__init_end); | ||
160 | } | 169 | } |
161 | 170 | ||
162 | #ifdef CONFIG_BLK_DEV_INITRD | 171 | #ifdef CONFIG_BLK_DEV_INITRD |
163 | void free_initrd_mem(unsigned long start, unsigned long end) | 172 | void free_initrd_mem(unsigned long start, unsigned long end) |
164 | { | 173 | { |
165 | if (start < end) | 174 | free_init_pages("initrd memory", start, end); |
166 | printk ("Freeing initrd memory: %ldk freed\n", (end - start) >> 10); | ||
167 | for (; start < end; start += PAGE_SIZE) { | ||
168 | ClearPageReserved(virt_to_page(start)); | ||
169 | init_page_count(virt_to_page(start)); | ||
170 | free_page(start); | ||
171 | totalram_pages++; | ||
172 | } | ||
173 | } | 175 | } |
174 | #endif | 176 | #endif |
175 | 177 | ||