Commit c4498ae3 authored by Juergen Gross's avatar Juergen Gross
Browse files

xen: move checks for e820 conflicts further up



Move the checks for e820 memory map conflicts using the
xen_chk_is_e820_usable() helper further up in order to prepare
resolving some of the possible conflicts by doing some e820 map
modifications, which must happen before evaluating the RAM layout.

Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
Tested-by: default avatarMarek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Reviewed-by: default avatarJan Beulich <jbeulich@suse.com>
Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
parent ba888297
Loading
Loading
Loading
Loading
+22 −22
Original line number Diff line number Diff line
@@ -764,6 +764,28 @@ char * __init xen_memory_setup(void)
	/* Make sure the Xen-supplied memory map is well-ordered. */
	e820__update_table(&xen_e820_table);

	/*
	 * Check whether the kernel itself conflicts with the target E820 map.
	 * Failing now is better than running into weird problems later due
	 * to relocating (and even reusing) pages with kernel text or data.
	 */
	xen_chk_is_e820_usable(__pa_symbol(_text),
			       __pa_symbol(_end) - __pa_symbol(_text),
			       "kernel");

	/*
	 * Check for a conflict of the xen_start_info memory with the target
	 * E820 map.
	 */
	xen_chk_is_e820_usable(__pa(xen_start_info), sizeof(*xen_start_info),
			       "xen_start_info");

	/*
	 * Check for a conflict of the hypervisor supplied page tables with
	 * the target E820 map.
	 */
	xen_pt_check_e820();

	max_pages = xen_get_max_pages();

	/* How many extra pages do we need due to remapping? */
@@ -836,28 +858,6 @@ char * __init xen_memory_setup(void)

	e820__update_table(e820_table);

	/*
	 * Check whether the kernel itself conflicts with the target E820 map.
	 * Failing now is better than running into weird problems later due
	 * to relocating (and even reusing) pages with kernel text or data.
	 */
	xen_chk_is_e820_usable(__pa_symbol(_text),
			       __pa_symbol(_end) - __pa_symbol(_text),
			       "kernel");

	/*
	 * Check for a conflict of the xen_start_info memory with the target
	 * E820 map.
	 */
	xen_chk_is_e820_usable(__pa(xen_start_info), sizeof(*xen_start_info),
			       "xen_start_info");

	/*
	 * Check for a conflict of the hypervisor supplied page tables with
	 * the target E820 map.
	 */
	xen_pt_check_e820();

	xen_reserve_xen_mfnlist();

	/* Check for a conflict of the initrd with the target E820 map. */