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: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
This commit is contained in:
parent
3fc509fc0c
commit
3287318764
1 changed files with 3 additions and 1 deletions
|
@ -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)
|
||||||
* 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();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue