|
64 | 64 | #define EARLY_KASLR (0) |
65 | 65 | #endif |
66 | 66 |
|
67 | | -#define EARLY_ENTRIES(vstart, vend, shift) \ |
68 | | - ((((vend) - 1) >> (shift)) - ((vstart) >> (shift)) + 1 + EARLY_KASLR) |
| 67 | +#define EARLY_ENTRIES(vstart, vend, shift, add) \ |
| 68 | + ((((vend) - 1) >> (shift)) - ((vstart) >> (shift)) + 1 + add) |
69 | 69 |
|
70 | | -#define EARLY_PGDS(vstart, vend) (EARLY_ENTRIES(vstart, vend, PGDIR_SHIFT)) |
| 70 | +#define EARLY_PGDS(vstart, vend, add) (EARLY_ENTRIES(vstart, vend, PGDIR_SHIFT, add)) |
71 | 71 |
|
72 | 72 | #if SWAPPER_PGTABLE_LEVELS > 3 |
73 | | -#define EARLY_PUDS(vstart, vend) (EARLY_ENTRIES(vstart, vend, PUD_SHIFT)) |
| 73 | +#define EARLY_PUDS(vstart, vend, add) (EARLY_ENTRIES(vstart, vend, PUD_SHIFT, add)) |
74 | 74 | #else |
75 | | -#define EARLY_PUDS(vstart, vend) (0) |
| 75 | +#define EARLY_PUDS(vstart, vend, add) (0) |
76 | 76 | #endif |
77 | 77 |
|
78 | 78 | #if SWAPPER_PGTABLE_LEVELS > 2 |
79 | | -#define EARLY_PMDS(vstart, vend) (EARLY_ENTRIES(vstart, vend, SWAPPER_TABLE_SHIFT)) |
| 79 | +#define EARLY_PMDS(vstart, vend, add) (EARLY_ENTRIES(vstart, vend, SWAPPER_TABLE_SHIFT, add)) |
80 | 80 | #else |
81 | | -#define EARLY_PMDS(vstart, vend) (0) |
| 81 | +#define EARLY_PMDS(vstart, vend, add) (0) |
82 | 82 | #endif |
83 | 83 |
|
84 | | -#define EARLY_PAGES(vstart, vend) ( 1 /* PGDIR page */ \ |
85 | | - + EARLY_PGDS((vstart), (vend)) /* each PGDIR needs a next level page table */ \ |
86 | | - + EARLY_PUDS((vstart), (vend)) /* each PUD needs a next level page table */ \ |
87 | | - + EARLY_PMDS((vstart), (vend))) /* each PMD needs a next level page table */ |
88 | | -#define INIT_DIR_SIZE (PAGE_SIZE * EARLY_PAGES(KIMAGE_VADDR, _end)) |
| 84 | +#define EARLY_PAGES(vstart, vend, add) ( 1 /* PGDIR page */ \ |
| 85 | + + EARLY_PGDS((vstart), (vend), add) /* each PGDIR needs a next level page table */ \ |
| 86 | + + EARLY_PUDS((vstart), (vend), add) /* each PUD needs a next level page table */ \ |
| 87 | + + EARLY_PMDS((vstart), (vend), add)) /* each PMD needs a next level page table */ |
| 88 | +#define INIT_DIR_SIZE (PAGE_SIZE * EARLY_PAGES(KIMAGE_VADDR, _end, EARLY_KASLR)) |
89 | 89 |
|
90 | 90 | /* the initial ID map may need two extra pages if it needs to be extended */ |
91 | 91 | #if VA_BITS < 48 |
92 | 92 | #define INIT_IDMAP_DIR_SIZE ((INIT_IDMAP_DIR_PAGES + 2) * PAGE_SIZE) |
93 | 93 | #else |
94 | 94 | #define INIT_IDMAP_DIR_SIZE (INIT_IDMAP_DIR_PAGES * PAGE_SIZE) |
95 | 95 | #endif |
96 | | -#define INIT_IDMAP_DIR_PAGES EARLY_PAGES(KIMAGE_VADDR, _end + MAX_FDT_SIZE + SWAPPER_BLOCK_SIZE) |
| 96 | +#define INIT_IDMAP_DIR_PAGES EARLY_PAGES(KIMAGE_VADDR, _end + MAX_FDT_SIZE + SWAPPER_BLOCK_SIZE, 1) |
97 | 97 |
|
98 | 98 | /* Initial memory map size */ |
99 | 99 | #if ARM64_KERNEL_USES_PMD_MAPS |
|
0 commit comments