Commit 32873187 authored by Konrad Rzeszutek Wilk's avatar Konrad Rzeszutek Wilk

xen/mmu: If the revector fails, don't attempt to revector anything else.

If the P2M revectoring would fail, we would try to continue on by
cleaning the PMD for L1 (PTE) page-tables. The xen_cleanhighmap
is greedy and erases the PMD on both boundaries. Since the P2M
array can share the PMD, we would wipe out part of the __ka
that is still used in the P2M tree to point to P2M leafs.

This fixes it by bypassing the revectoring and continuing on.
If the revector fails, a nice WARN is printed so we can still
troubleshoot this.
Signed-off-by: default avatarKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
parent 3fc509fc
...@@ -1238,7 +1238,8 @@ static void __init xen_pagetable_setup_done(pgd_t *base) ...@@ -1238,7 +1238,8 @@ static void __init xen_pagetable_setup_done(pgd_t *base)
memblock_free(__pa(xen_start_info->mfn_list), size); memblock_free(__pa(xen_start_info->mfn_list), size);
/* And revector! Bye bye old array */ /* And revector! Bye bye old array */
xen_start_info->mfn_list = new_mfn_list; xen_start_info->mfn_list = new_mfn_list;
} } else
goto skip;
} }
/* At this stage, cleanup_highmap has already cleaned __ka space /* At this stage, cleanup_highmap has already cleaned __ka space
* from _brk_limit way up to the max_pfn_mapped (which is the end of * from _brk_limit way up to the max_pfn_mapped (which is the end of
...@@ -1259,6 +1260,7 @@ static void __init xen_pagetable_setup_done(pgd_t *base) ...@@ -1259,6 +1260,7 @@ static void __init xen_pagetable_setup_done(pgd_t *base)
* anything at this stage. */ * anything at this stage. */
xen_cleanhighmap(MODULES_VADDR, roundup(MODULES_VADDR, PUD_SIZE) - 1); xen_cleanhighmap(MODULES_VADDR, roundup(MODULES_VADDR, PUD_SIZE) - 1);
#endif #endif
skip:
#endif #endif
xen_post_allocator_init(); xen_post_allocator_init();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment