|
@@ -53,6 +53,7 @@ void __head __startup_64(unsigned long physaddr)
|
|
|
pudval_t *pud;
|
|
|
pmdval_t *pmd, pmd_entry;
|
|
|
int i;
|
|
|
+ unsigned int *next_pgt_ptr;
|
|
|
|
|
|
/* Is the address too large? */
|
|
|
if (physaddr >> MAX_PHYSMEM_BITS)
|
|
@@ -91,9 +92,9 @@ void __head __startup_64(unsigned long physaddr)
|
|
|
* creates a bunch of nonsense entries but that is fine --
|
|
|
* it avoids problems around wraparound.
|
|
|
*/
|
|
|
-
|
|
|
- pud = fixup_pointer(early_dynamic_pgts[next_early_pgt++], physaddr);
|
|
|
- pmd = fixup_pointer(early_dynamic_pgts[next_early_pgt++], physaddr);
|
|
|
+ next_pgt_ptr = fixup_pointer(&next_early_pgt, physaddr);
|
|
|
+ pud = fixup_pointer(early_dynamic_pgts[(*next_pgt_ptr)++], physaddr);
|
|
|
+ pmd = fixup_pointer(early_dynamic_pgts[(*next_pgt_ptr)++], physaddr);
|
|
|
|
|
|
if (IS_ENABLED(CONFIG_X86_5LEVEL)) {
|
|
|
p4d = fixup_pointer(early_dynamic_pgts[next_early_pgt++], physaddr);
|