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

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

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
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -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();
}
}