]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
xen: move checks for e820 conflicts further up
authorJuergen Gross <jgross@suse.com>
Tue, 6 Aug 2024 07:56:48 +0000 (09:56 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 4 Oct 2024 14:33:23 +0000 (16:33 +0200)
commit c4498ae316da5b5786ccd448fc555f3339b8e4ca upstream.

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: Juergen Gross <jgross@suse.com>
Tested-by: Marek Marczykowski-Górecki <marmarek@invisiblethingslab.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
Signed-off-by: Juergen Gross <jgross@suse.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
arch/x86/xen/setup.c

index 989c14b1ff6c84fd111746d4aa5cee9749aaa0e9..1a426d7c1d0d73f6567289d8946e9f98096e0891 100644 (file)
@@ -855,6 +855,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? */
@@ -927,28 +949,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. */