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>
#error Unknown architecture
#endif
{
- unsigned long phys = trampoline_phys;
+ uint32_t phys = trampoline_phys;
const int32_t *trampoline_ptr;
/*
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
* 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.
#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 */