]> xenbits.xensource.com Git - people/aperard/xen-unstable.git/commitdiff
x86/trampoline: Change type of trampoline_phys to uint32_t
authorAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 11 Nov 2024 10:41:36 +0000 (10:41 +0000)
committerAndrew Cooper <andrew.cooper3@citrix.com>
Mon, 11 Nov 2024 15:25:39 +0000 (15:25 +0000)
As now documented, this variable holds a page aligned value less than 1M.

However, head.S fills it using 4-byte stores, and reloc_trampoline() is
compiled for both 32bit and 64bit, where unsigned long is a different size.

This happens to work because of the range of the value, but switch to uint32_t
to make it explicit.

Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
xen/arch/x86/boot/reloc-trampoline.c
xen/arch/x86/efi/efi-boot.h
xen/arch/x86/include/asm/trampoline.h
xen/arch/x86/smpboot.c

index 0a74c1e75a4c9c35965b7362be9102e346409374..d5548eb08f856db033e5e8ed5ef7e96bbbbbfbe5 100644 (file)
@@ -15,7 +15,7 @@ void reloc_trampoline64(void)
 #error Unknown architecture
 #endif
 {
-    unsigned long phys = trampoline_phys;
+    uint32_t phys = trampoline_phys;
     const int32_t *trampoline_ptr;
 
     /*
index 3133985c88f86866306204ac59a845d394e8bf2e..7930b7c7389260bbdb7da38fe3dae55a747430dc 100644 (file)
@@ -235,7 +235,7 @@ static void __init noreturn efi_arch_post_exit_boot(void)
     u64 cr4 = XEN_MINIMAL_CR4 & ~X86_CR4_PGE, efer;
 
     efi_arch_relocate_image(__XEN_VIRT_START - xen_phys_start);
-    memcpy((void *)trampoline_phys, trampoline_start, cfg.size);
+    memcpy(_p(trampoline_phys), trampoline_start, cfg.size);
 
     /*
      * We're in physical mode right now (i.e. identity map), so a regular
index 838c2f0b6fcdea44c30c541f349e0e168316633d..8c1e0b48c2c9f452e70893645cb965ed57297b3c 100644 (file)
@@ -52,7 +52,7 @@ extern char trampoline_start[], trampoline_end[];
  * the 1M boundary (as the trampoline contains 16-bit code), and must be 4k
  * aligned (SIPI requirement for APs).
  */
-extern unsigned long trampoline_phys;
+extern uint32_t trampoline_phys;
 
 /*
  * Calculate the physical address of a symbol in the trampoline.
index 568a3abe1f47b46021006ff85308dc7487098874..79a79c54c30403940b211c39f1aa5b4d29511080 100644 (file)
@@ -41,7 +41,7 @@
 #include <asm/trampoline.h>
 #include <asm/irq-vectors.h>
 
-unsigned long __read_mostly trampoline_phys;
+uint32_t __ro_after_init trampoline_phys;
 enum ap_boot_method __read_mostly ap_boot_method = AP_BOOT_NORMAL;
 
 /* representing HT siblings of each logical CPU */