diff options
Diffstat (limited to 'arch/microblaze/mm/init.c')
-rw-r--r-- | arch/microblaze/mm/init.c | 47 |
1 files changed, 31 insertions, 16 deletions
diff --git a/arch/microblaze/mm/init.c b/arch/microblaze/mm/init.c index a44892e7cd5b..cca3579d4268 100644 --- a/arch/microblaze/mm/init.c +++ b/arch/microblaze/mm/init.c | |||
@@ -15,6 +15,7 @@ | |||
15 | #include <linux/initrd.h> | 15 | #include <linux/initrd.h> |
16 | #include <linux/pagemap.h> | 16 | #include <linux/pagemap.h> |
17 | #include <linux/pfn.h> | 17 | #include <linux/pfn.h> |
18 | #include <linux/slab.h> | ||
18 | #include <linux/swap.h> | 19 | #include <linux/swap.h> |
19 | 20 | ||
20 | #include <asm/page.h> | 21 | #include <asm/page.h> |
@@ -23,6 +24,9 @@ | |||
23 | #include <asm/sections.h> | 24 | #include <asm/sections.h> |
24 | #include <asm/tlb.h> | 25 | #include <asm/tlb.h> |
25 | 26 | ||
27 | /* Use for MMU and noMMU because of PCI generic code */ | ||
28 | int mem_init_done; | ||
29 | |||
26 | #ifndef CONFIG_MMU | 30 | #ifndef CONFIG_MMU |
27 | unsigned int __page_offset; | 31 | unsigned int __page_offset; |
28 | EXPORT_SYMBOL(__page_offset); | 32 | EXPORT_SYMBOL(__page_offset); |
@@ -30,7 +34,6 @@ EXPORT_SYMBOL(__page_offset); | |||
30 | #else | 34 | #else |
31 | DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); | 35 | DEFINE_PER_CPU(struct mmu_gather, mmu_gathers); |
32 | 36 | ||
33 | int mem_init_done; | ||
34 | static int init_bootmem_done; | 37 | static int init_bootmem_done; |
35 | #endif /* CONFIG_MMU */ | 38 | #endif /* CONFIG_MMU */ |
36 | 39 | ||
@@ -41,8 +44,10 @@ char *klimit = _end; | |||
41 | * have available. | 44 | * have available. |
42 | */ | 45 | */ |
43 | unsigned long memory_start; | 46 | unsigned long memory_start; |
47 | EXPORT_SYMBOL(memory_start); | ||
44 | unsigned long memory_end; /* due to mm/nommu.c */ | 48 | unsigned long memory_end; /* due to mm/nommu.c */ |
45 | unsigned long memory_size; | 49 | unsigned long memory_size; |
50 | EXPORT_SYMBOL(memory_size); | ||
46 | 51 | ||
47 | /* | 52 | /* |
48 | * paging_init() sets up the page tables - in fact we've already done this. | 53 | * paging_init() sets up the page tables - in fact we've already done this. |
@@ -162,7 +167,6 @@ void free_init_pages(char *what, unsigned long begin, unsigned long end) | |||
162 | for (addr = begin; addr < end; addr += PAGE_SIZE) { | 167 | for (addr = begin; addr < end; addr += PAGE_SIZE) { |
163 | ClearPageReserved(virt_to_page(addr)); | 168 | ClearPageReserved(virt_to_page(addr)); |
164 | init_page_count(virt_to_page(addr)); | 169 | init_page_count(virt_to_page(addr)); |
165 | memset((void *)addr, 0xcc, PAGE_SIZE); | ||
166 | free_page(addr); | 170 | free_page(addr); |
167 | totalram_pages++; | 171 | totalram_pages++; |
168 | } | 172 | } |
@@ -192,12 +196,6 @@ void free_initmem(void) | |||
192 | (unsigned long)(&__init_end)); | 196 | (unsigned long)(&__init_end)); |
193 | } | 197 | } |
194 | 198 | ||
195 | /* FIXME from arch/powerpc/mm/mem.c*/ | ||
196 | void show_mem(void) | ||
197 | { | ||
198 | printk(KERN_NOTICE "%s\n", __func__); | ||
199 | } | ||
200 | |||
201 | void __init mem_init(void) | 199 | void __init mem_init(void) |
202 | { | 200 | { |
203 | high_memory = (void *)__va(memory_end); | 201 | high_memory = (void *)__va(memory_end); |
@@ -207,20 +205,14 @@ void __init mem_init(void) | |||
207 | printk(KERN_INFO "Memory: %luk/%luk available\n", | 205 | printk(KERN_INFO "Memory: %luk/%luk available\n", |
208 | nr_free_pages() << (PAGE_SHIFT-10), | 206 | nr_free_pages() << (PAGE_SHIFT-10), |
209 | num_physpages << (PAGE_SHIFT-10)); | 207 | num_physpages << (PAGE_SHIFT-10)); |
210 | #ifdef CONFIG_MMU | ||
211 | mem_init_done = 1; | 208 | mem_init_done = 1; |
212 | #endif | ||
213 | } | 209 | } |
214 | 210 | ||
215 | #ifndef CONFIG_MMU | 211 | #ifndef CONFIG_MMU |
216 | /* Check against bounds of physical memory */ | 212 | int page_is_ram(unsigned long pfn) |
217 | int ___range_ok(unsigned long addr, unsigned long size) | ||
218 | { | 213 | { |
219 | return ((addr < memory_start) || | 214 | return __range_ok(pfn, 0); |
220 | ((addr + size) > memory_end)); | ||
221 | } | 215 | } |
222 | EXPORT_SYMBOL(___range_ok); | ||
223 | |||
224 | #else | 216 | #else |
225 | int page_is_ram(unsigned long pfn) | 217 | int page_is_ram(unsigned long pfn) |
226 | { | 218 | { |
@@ -348,4 +340,27 @@ void __init *early_get_page(void) | |||
348 | } | 340 | } |
349 | return p; | 341 | return p; |
350 | } | 342 | } |
343 | |||
351 | #endif /* CONFIG_MMU */ | 344 | #endif /* CONFIG_MMU */ |
345 | |||
346 | void * __init_refok alloc_maybe_bootmem(size_t size, gfp_t mask) | ||
347 | { | ||
348 | if (mem_init_done) | ||
349 | return kmalloc(size, mask); | ||
350 | else | ||
351 | return alloc_bootmem(size); | ||
352 | } | ||
353 | |||
354 | void * __init_refok zalloc_maybe_bootmem(size_t size, gfp_t mask) | ||
355 | { | ||
356 | void *p; | ||
357 | |||
358 | if (mem_init_done) | ||
359 | p = kzalloc(size, mask); | ||
360 | else { | ||
361 | p = alloc_bootmem(size); | ||
362 | if (p) | ||
363 | memset(p, 0, size); | ||
364 | } | ||
365 | return p; | ||
366 | } | ||