x86/xen: enable early use of set_fixmap in 32-bit Xen PV guest
Commit7b25b9cb0d
("x86/xen/time: Initialize pv xen time in init_hypervisor_platform()") moved the mapping of the shared info area before pagetable_init(). This breaks booting as 32-bit PV guest as the use of set_fixmap isn't possible at this time on 32-bit. This can be worked around by populating the needed PMD on 32-bit kernel earlier. In order not to reimplement populate_extra_pte() using extend_brk() for allocating new page tables extend alloc_low_pages() to do that in case the early page table pool is not yet available. Fixes:7b25b9cb0d
("x86/xen/time: Initialize pv xen time in init_hypervisor_platform()") Signed-off-by: Juergen Gross <jgross@suse.com> Reviewed-by: Thomas Gleixner <tglx@linutronix.de> Signed-off-by: Boris Ostrovsky <boris.ostrovsky@oracle.com>
Šī revīzija ir iekļauta:

revīziju iesūtīja
Boris Ostrovsky

vecāks
00f53f758d
revīzija
75f2d3a0ce
@@ -122,6 +122,8 @@ static void __init xen_banner(void)
|
||||
|
||||
static void __init xen_pv_init_platform(void)
|
||||
{
|
||||
populate_extra_pte(fix_to_virt(FIX_PARAVIRT_BOOTMAP));
|
||||
|
||||
set_fixmap(FIX_PARAVIRT_BOOTMAP, xen_start_info->shared_info);
|
||||
HYPERVISOR_shared_info = (void *)fix_to_virt(FIX_PARAVIRT_BOOTMAP);
|
||||
|
||||
|
@@ -2171,6 +2171,8 @@ void __init xen_relocate_p2m(void)
|
||||
#else /* !CONFIG_X86_64 */
|
||||
static RESERVE_BRK_ARRAY(pmd_t, initial_kernel_pmd, PTRS_PER_PMD);
|
||||
static RESERVE_BRK_ARRAY(pmd_t, swapper_kernel_pmd, PTRS_PER_PMD);
|
||||
RESERVE_BRK(fixup_kernel_pmd, PAGE_SIZE);
|
||||
RESERVE_BRK(fixup_kernel_pte, PAGE_SIZE);
|
||||
|
||||
static void __init xen_write_cr3_init(unsigned long cr3)
|
||||
{
|
||||
|
Atsaukties uz šo jaunā problēmā
Block a user