.. | .. |
---|
17 | 17 | #include <linux/string.h> |
---|
18 | 18 | #include <linux/types.h> |
---|
19 | 19 | #include <linux/init.h> |
---|
20 | | -#include <linux/bootmem.h> |
---|
| 20 | +#include <linux/memblock.h> |
---|
21 | 21 | #include <linux/gfp.h> |
---|
22 | 22 | |
---|
23 | 23 | #include <asm/setup.h> |
---|
.. | .. |
---|
39 | 39 | */ |
---|
40 | 40 | void *empty_zero_page; |
---|
41 | 41 | EXPORT_SYMBOL(empty_zero_page); |
---|
42 | | - |
---|
43 | | -#if !defined(CONFIG_SUN3) && !defined(CONFIG_COLDFIRE) |
---|
44 | | -extern void init_pointer_table(unsigned long ptable); |
---|
45 | | -extern pmd_t *zero_pgtable; |
---|
46 | | -#endif |
---|
47 | 42 | |
---|
48 | 43 | #ifdef CONFIG_MMU |
---|
49 | 44 | |
---|
.. | .. |
---|
89 | 84 | * page_alloc get different views of the world. |
---|
90 | 85 | */ |
---|
91 | 86 | unsigned long end_mem = memory_end & PAGE_MASK; |
---|
92 | | - unsigned long zones_size[MAX_NR_ZONES] = { 0, }; |
---|
| 87 | + unsigned long max_zone_pfn[MAX_NR_ZONES] = { 0, }; |
---|
93 | 88 | |
---|
94 | 89 | high_memory = (void *) end_mem; |
---|
95 | 90 | |
---|
96 | | - empty_zero_page = alloc_bootmem_pages(PAGE_SIZE); |
---|
| 91 | + empty_zero_page = memblock_alloc(PAGE_SIZE, PAGE_SIZE); |
---|
| 92 | + if (!empty_zero_page) |
---|
| 93 | + panic("%s: Failed to allocate %lu bytes align=0x%lx\n", |
---|
| 94 | + __func__, PAGE_SIZE, PAGE_SIZE); |
---|
97 | 95 | |
---|
98 | 96 | /* |
---|
99 | 97 | * Set up SFC/DFC registers (user data space). |
---|
100 | 98 | */ |
---|
101 | 99 | set_fs (USER_DS); |
---|
102 | 100 | |
---|
103 | | - zones_size[ZONE_DMA] = (end_mem - PAGE_OFFSET) >> PAGE_SHIFT; |
---|
104 | | - free_area_init(zones_size); |
---|
| 101 | + max_zone_pfn[ZONE_DMA] = end_mem >> PAGE_SHIFT; |
---|
| 102 | + free_area_init(max_zone_pfn); |
---|
105 | 103 | } |
---|
106 | 104 | |
---|
107 | 105 | #endif /* CONFIG_MMU */ |
---|
.. | .. |
---|
122 | 120 | static inline void init_pointer_tables(void) |
---|
123 | 121 | { |
---|
124 | 122 | #if defined(CONFIG_MMU) && !defined(CONFIG_SUN3) && !defined(CONFIG_COLDFIRE) |
---|
125 | | - int i; |
---|
| 123 | + int i, j; |
---|
126 | 124 | |
---|
127 | 125 | /* insert pointer tables allocated so far into the tablelist */ |
---|
128 | | - init_pointer_table((unsigned long)kernel_pg_dir); |
---|
| 126 | + init_pointer_table(kernel_pg_dir, TABLE_PGD); |
---|
129 | 127 | for (i = 0; i < PTRS_PER_PGD; i++) { |
---|
130 | | - if (pgd_present(kernel_pg_dir[i])) |
---|
131 | | - init_pointer_table(__pgd_page(kernel_pg_dir[i])); |
---|
132 | | - } |
---|
| 128 | + pud_t *pud = (pud_t *)&kernel_pg_dir[i]; |
---|
| 129 | + pmd_t *pmd_dir; |
---|
133 | 130 | |
---|
134 | | - /* insert also pointer table that we used to unmap the zero page */ |
---|
135 | | - if (zero_pgtable) |
---|
136 | | - init_pointer_table((unsigned long)zero_pgtable); |
---|
| 131 | + if (!pud_present(*pud)) |
---|
| 132 | + continue; |
---|
| 133 | + |
---|
| 134 | + pmd_dir = (pmd_t *)pgd_page_vaddr(kernel_pg_dir[i]); |
---|
| 135 | + init_pointer_table(pmd_dir, TABLE_PMD); |
---|
| 136 | + |
---|
| 137 | + for (j = 0; j < PTRS_PER_PMD; j++) { |
---|
| 138 | + pmd_t *pmd = &pmd_dir[j]; |
---|
| 139 | + pte_t *pte_dir; |
---|
| 140 | + |
---|
| 141 | + if (!pmd_present(*pmd)) |
---|
| 142 | + continue; |
---|
| 143 | + |
---|
| 144 | + pte_dir = (pte_t *)pmd_page_vaddr(*pmd); |
---|
| 145 | + init_pointer_table(pte_dir, TABLE_PTE); |
---|
| 146 | + } |
---|
| 147 | + } |
---|
137 | 148 | #endif |
---|
138 | 149 | } |
---|
139 | 150 | |
---|
140 | 151 | void __init mem_init(void) |
---|
141 | 152 | { |
---|
142 | 153 | /* this will put all memory onto the freelists */ |
---|
143 | | - free_all_bootmem(); |
---|
| 154 | + memblock_free_all(); |
---|
144 | 155 | init_pointer_tables(); |
---|
145 | 156 | mem_init_print_info(NULL); |
---|
146 | 157 | } |
---|
147 | | - |
---|
148 | | -#ifdef CONFIG_BLK_DEV_INITRD |
---|
149 | | -void free_initrd_mem(unsigned long start, unsigned long end) |
---|
150 | | -{ |
---|
151 | | - free_reserved_area((void *)start, (void *)end, -1, "initrd"); |
---|
152 | | -} |
---|
153 | | -#endif |
---|