[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [xen staging] x86/boot: Fix data placement around __high_start()
commit ffa5d037c78fe175f31373deec0759ff8cc8d66c Author: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> AuthorDate: Mon Nov 29 19:52:05 2021 +0000 Commit: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CommitDate: Thu Dec 2 20:02:55 2021 +0000 x86/boot: Fix data placement around __high_start() multiboot_ptr should be in __initdata - it is only used on the BSP path. Furthermore, the .align 8 then .long means that stack_start is misaligned. Move both into setup.c, which lets the compiler handle the details correctly, as well as providing proper debug information for them. Declare stack_start in setup.h and avoid extern-ing it locally in smpboot.c. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> Reviewed-by: Jan Beulich <jbeulich@xxxxxxxx> --- xen/arch/x86/boot/x86_64.S | 8 -------- xen/arch/x86/setup.c | 6 ++++++ xen/arch/x86/smpboot.c | 3 +-- xen/include/asm-x86/setup.h | 2 ++ 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/xen/arch/x86/boot/x86_64.S b/xen/arch/x86/boot/x86_64.S index d61048c583..27f52e7a77 100644 --- a/xen/arch/x86/boot/x86_64.S +++ b/xen/arch/x86/boot/x86_64.S @@ -67,14 +67,6 @@ ENTRY(__high_start) call __start_xen BUG /* __start_xen() shouldn't return. */ - .data - .align 8 -multiboot_ptr: - .long 0 - -GLOBAL(stack_start) - .quad cpu0_stack + STACK_SIZE - CPUINFO_sizeof - .section .data.page_aligned, "aw", @progbits .align PAGE_SIZE, 0 /* diff --git a/xen/arch/x86/setup.c b/xen/arch/x86/setup.c index 495b4b7d51..6613e56a21 100644 --- a/xen/arch/x86/setup.c +++ b/xen/arch/x86/setup.c @@ -141,6 +141,12 @@ unsigned long __read_mostly xen_virt_end; char __section(".bss.stack_aligned") __aligned(STACK_SIZE) cpu0_stack[STACK_SIZE]; +/* Used by the BSP/AP paths to find the higher half stack mapping to use. */ +void *stack_start = cpu0_stack + STACK_SIZE - sizeof(struct cpu_info); + +/* Used by the boot asm to stash the relocated multiboot info pointer. */ +unsigned int __initdata multiboot_ptr; + struct cpuinfo_x86 __read_mostly boot_cpu_data = { 0, 0, 0, 0, -1 }; unsigned long __read_mostly mmu_cr4_features = XEN_MINIMAL_CR4; diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c index 329cfdb6c9..08c0f2d9df 100644 --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -42,6 +42,7 @@ #include <asm/microcode.h> #include <asm/msr.h> #include <asm/mtrr.h> +#include <asm/setup.h> #include <asm/spec_ctrl.h> #include <asm/time.h> #include <asm/tboot.h> @@ -419,8 +420,6 @@ void start_secondary(void *unused) startup_cpu_idle_loop(); } -extern void *stack_start; - static int wakeup_secondary_cpu(int phys_apicid, unsigned long start_eip) { unsigned long send_status = 0, accept_status = 0; diff --git a/xen/include/asm-x86/setup.h b/xen/include/asm-x86/setup.h index 24be46115d..eb9d7b433c 100644 --- a/xen/include/asm-x86/setup.h +++ b/xen/include/asm-x86/setup.h @@ -12,6 +12,8 @@ extern char __2M_rwdata_start[], __2M_rwdata_end[]; extern unsigned long xenheap_initial_phys_start; extern uint64_t boot_tsc_stamp; +extern void *stack_start; + void early_cpu_init(void); void early_time_init(void); -- generated by git-patchbot for /home/xen/git/xen.git#staging
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |