Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 37cc8d7f authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge Committed by Ingo Molnar
Browse files

x86/early_ioremap: don't assume we're using swapper_pg_dir



At the early stages of boot, before the kernel pagetable has been
fully initialized, a Xen kernel will still be running off the
Xen-provided pagetables rather than swapper_pg_dir[].  Therefore,
readback cr3 to determine the base of the pagetable rather than
assuming swapper_pg_dir[].

Signed-off-by: default avatarJeremy Fitzhardinge <jeremy@xensource.com>
Tested-by: default avatarJody Belka <knew-linux@pimb.org>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 416e2d63
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -265,7 +265,9 @@ static __initdata pte_t bm_pte[PAGE_SIZE/sizeof(pte_t)]

static inline pmd_t * __init early_ioremap_pmd(unsigned long addr)
{
	pgd_t *pgd = &swapper_pg_dir[pgd_index(addr)];
	/* Don't assume we're using swapper_pg_dir at this point */
	pgd_t *base = __va(read_cr3());
	pgd_t *pgd = &base[pgd_index(addr)];
	pud_t *pud = pud_offset(pgd, addr);
	pmd_t *pmd = pmd_offset(pud, addr);