]> xenbits.xensource.com Git - people/aperard/xen-unstable.git/commitdiff
x86/trampoline: load the GDT located in the trampoline page
authorRoger Pau Monné <roger.pau@citrix.com>
Wed, 3 May 2023 11:37:19 +0000 (13:37 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 3 May 2023 11:37:19 +0000 (13:37 +0200)
When booting the BSP the portion of the code executed from the
trampoline page will be using the GDT located in the hypervisor
.text.head section rather than the GDT located in the relocated
trampoline page.

If skip_realmode is not set the GDT located in the trampoline page
will be loaded after having executed the BIOS call, otherwise the GDT
from .text.head will be used for all the protected mode trampoline
code execution.

Note that both gdt_boot_descr and gdt_48 contain the same entries, but
the former is located inside the hypervisor .text section, while the
later lives in the relocated trampoline page.

This is not harmful as-is, as both GDTs contain the same entries, but
for consistency with the APs switch the BSP trampoline code to also
use the GDT on the relocated trampoline page.

Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
Reviewed-by: Andrew Cooper <andrew.cooper3@citrix.com>
xen/arch/x86/boot/trampoline.S

index cdecf949b410e402ac9c3fd01d8c218bc1397dd9..c6005fa33d1f2bce3771c52edf0cc5b24604aaa4 100644 (file)
@@ -164,6 +164,9 @@ GLOBAL(trampoline_cpu_started)
 
         .code32
 trampoline_boot_cpu_entry:
+        /* Switch to relocated trampoline GDT. */
+        lgdt    bootsym_rel(gdt_48, 4)
+
         cmpb    $0,bootsym_rel(skip_realmode,5)
         jnz     .Lskip_realmode