hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/arch/nds32/mm/init.c
....@@ -7,12 +7,11 @@
77 #include <linux/errno.h>
88 #include <linux/swap.h>
99 #include <linux/init.h>
10
-#include <linux/bootmem.h>
10
+#include <linux/memblock.h>
1111 #include <linux/mman.h>
1212 #include <linux/nodemask.h>
1313 #include <linux/initrd.h>
1414 #include <linux/highmem.h>
15
-#include <linux/memblock.h>
1615
1716 #include <asm/sections.h>
1817 #include <asm/setup.h>
....@@ -22,8 +21,6 @@
2221 DEFINE_PER_CPU(struct mmu_gather, mmu_gathers);
2322 DEFINE_SPINLOCK(anon_alias_lock);
2423 extern pgd_t swapper_pg_dir[PTRS_PER_PGD];
25
-extern unsigned long phys_initrd_start;
26
-extern unsigned long phys_initrd_size;
2724
2825 /*
2926 * empty_zero_page is a special page that is used for
....@@ -34,16 +31,13 @@
3431
3532 static void __init zone_sizes_init(void)
3633 {
37
- unsigned long zones_size[MAX_NR_ZONES];
34
+ unsigned long max_zone_pfn[MAX_NR_ZONES] = { 0 };
3835
39
- /* Clear the zone sizes */
40
- memset(zones_size, 0, sizeof(zones_size));
41
-
42
- zones_size[ZONE_NORMAL] = max_low_pfn;
36
+ max_zone_pfn[ZONE_NORMAL] = max_low_pfn;
4337 #ifdef CONFIG_HIGHMEM
44
- zones_size[ZONE_HIGHMEM] = max_pfn;
38
+ max_zone_pfn[ZONE_HIGHMEM] = max_pfn;
4539 #endif
46
- free_area_init(zones_size);
40
+ free_area_init(max_zone_pfn);
4741
4842 }
4943
....@@ -57,6 +51,7 @@
5751 {
5852 unsigned long v, p, e;
5953 pgd_t *pge;
54
+ p4d_t *p4e;
6055 pud_t *pue;
6156 pmd_t *pme;
6257 pte_t *pte;
....@@ -72,7 +67,8 @@
7267
7368 while (p < e) {
7469 int j;
75
- pue = pud_offset(pge, v);
70
+ p4e = p4d_offset(pge, v);
71
+ pue = pud_offset(p4e, v);
7672 pme = pmd_offset(pue, v);
7773
7874 if ((u32) pue != (u32) pge || (u32) pme != (u32) pge) {
....@@ -81,8 +77,10 @@
8177 }
8278
8379 /* Alloc one page for holding PTE's... */
84
- pte = (pte_t *) __va(memblock_alloc(PAGE_SIZE, PAGE_SIZE));
85
- memset(pte, 0, PAGE_SIZE);
80
+ pte = memblock_alloc(PAGE_SIZE, PAGE_SIZE);
81
+ if (!pte)
82
+ panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
83
+ __func__, PAGE_SIZE, PAGE_SIZE);
8684 set_pmd(pme, __pmd(__pa(pte) + _PAGE_KERNEL_TABLE));
8785
8886 /* Fill the newly allocated page with PTE'S */
....@@ -100,8 +98,6 @@
10098 static void __init fixedrange_init(void)
10199 {
102100 unsigned long vaddr;
103
- pgd_t *pgd;
104
- pud_t *pud;
105101 pmd_t *pmd;
106102 #ifdef CONFIG_HIGHMEM
107103 pte_t *pte;
....@@ -111,11 +107,11 @@
111107 * Fixed mappings:
112108 */
113109 vaddr = __fix_to_virt(__end_of_fixed_addresses - 1);
114
- pgd = swapper_pg_dir + pgd_index(vaddr);
115
- pud = pud_offset(pgd, vaddr);
116
- pmd = pmd_offset(pud, vaddr);
117
- fixmap_pmd_p = (pmd_t *) __va(memblock_alloc(PAGE_SIZE, PAGE_SIZE));
118
- memset(fixmap_pmd_p, 0, PAGE_SIZE);
110
+ pmd = pmd_off_k(vaddr);
111
+ fixmap_pmd_p = memblock_alloc(PAGE_SIZE, PAGE_SIZE);
112
+ if (!fixmap_pmd_p)
113
+ panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
114
+ __func__, PAGE_SIZE, PAGE_SIZE);
119115 set_pmd(pmd, __pmd(__pa(fixmap_pmd_p) + _PAGE_KERNEL_TABLE));
120116
121117 #ifdef CONFIG_HIGHMEM
....@@ -124,11 +120,11 @@
124120 */
125121 vaddr = PKMAP_BASE;
126122
127
- pgd = swapper_pg_dir + pgd_index(vaddr);
128
- pud = pud_offset(pgd, vaddr);
129
- pmd = pmd_offset(pud, vaddr);
130
- pte = (pte_t *) __va(memblock_alloc(PAGE_SIZE, PAGE_SIZE));
131
- memset(pte, 0, PAGE_SIZE);
123
+ pmd = pmd_off_k(vaddr);
124
+ pte = memblock_alloc(PAGE_SIZE, PAGE_SIZE);
125
+ if (!pte)
126
+ panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
127
+ __func__, PAGE_SIZE, PAGE_SIZE);
132128 set_pmd(pmd, __pmd(__pa(pte) + _PAGE_KERNEL_TABLE));
133129 pkmap_page_table = pte;
134130 #endif /* CONFIG_HIGHMEM */
....@@ -153,8 +149,10 @@
153149 fixedrange_init();
154150
155151 /* allocate space for empty_zero_page */
156
- zero_page = __va(memblock_alloc(PAGE_SIZE, PAGE_SIZE));
157
- memset(zero_page, 0, PAGE_SIZE);
152
+ zero_page = memblock_alloc(PAGE_SIZE, PAGE_SIZE);
153
+ if (!zero_page)
154
+ panic("%s: Failed to allocate %lu bytes align=0x%lx\n",
155
+ __func__, PAGE_SIZE, PAGE_SIZE);
158156 zone_sizes_init();
159157
160158 empty_zero_page = virt_to_page(zero_page);
....@@ -192,7 +190,7 @@
192190 free_highmem();
193191
194192 /* this will put all low memory onto the freelists */
195
- free_all_bootmem();
193
+ memblock_free_all();
196194 mem_init_print_info(NULL);
197195
198196 pr_info("virtual kernel memory layout:\n"
....@@ -247,18 +245,6 @@
247245 return;
248246 }
249247
250
-void free_initmem(void)
251
-{
252
- free_initmem_default(-1);
253
-}
254
-
255
-#ifdef CONFIG_BLK_DEV_INITRD
256
-void free_initrd_mem(unsigned long start, unsigned long end)
257
-{
258
- free_reserved_area((void *)start, (void *)end, -1, "initrd");
259
-}
260
-#endif
261
-
262248 void __set_fixmap(enum fixed_addresses idx,
263249 phys_addr_t phys, pgprot_t flags)
264250 {
....@@ -267,7 +253,7 @@
267253
268254 BUG_ON(idx <= FIX_HOLE || idx >= __end_of_fixed_addresses);
269255
270
- pte = (pte_t *)&fixmap_pmd_p[pte_index(addr)];;
256
+ pte = (pte_t *)&fixmap_pmd_p[pte_index(addr)];
271257
272258 if (pgprot_val(flags)) {
273259 set_pte(pte, pfn_pte(phys >> PAGE_SHIFT, flags));