[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v2 2/3] x86/boot: Move some __high_start code and data into init sections
Half of __high_start is strictly for the BSP and will only be run once on boot. To complement 'start_secondary', create 'start_bsp' and move it into the init.text section. The interrupt handler 'ingore_int' is patched into the BSPs IDT, but fully replaced with real handlers early during boot. The BSPs IDT is used by APs until midway through start_secondary, but after the real handlers have been installed. Therefore, 'ignore_int' can move to init.text. Furthermore, its strings can move to init.rodata. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CC: Keir Fraser <keir@xxxxxxx> CC: Jan Beulich <JBeulich@xxxxxxxx> --- v2: Move data to .init.rodata. Add missing @progbits. I know start_bsp doesn't need to be a GLOBAL(), but it prevents objdump looking like: ffff82d08010005b: 85 db test %ebx,%ebx ffff82d08010005d: 0f 85 ae 46 08 00 jne ffff82d080184711 <start_secondary> ffff82d080100063: e9 08 0f 19 00 jmpq ffff82d080290f70 <trampoline_end> which is confusing to say the least. An alternative would be to insert some explicit alignment such that trampoline_end and start_bsp were no longer at the same virtual address, but this feels worse than using GLOBAL(). --- xen/arch/x86/boot/x86_64.S | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/boot/x86_64.S b/xen/arch/x86/boot/x86_64.S index 8f92402..7ecfad3 100644 --- a/xen/arch/x86/boot/x86_64.S +++ b/xen/arch/x86/boot/x86_64.S @@ -29,7 +29,11 @@ test %ebx,%ebx jnz start_secondary + jmp start_bsp + .section .init.text, "ax", @progbits + +GLOBAL(start_bsp) /* Initialise IDT with simple error defaults. */ leaq ignore_int(%rip),%rcx movl %ecx,%eax @@ -55,10 +59,6 @@ ud2 /* Force a panic (invalid opcode). */ /* This is the default interrupt handler. */ -int_msg: - .asciz "Unknown interrupt (cr2=%016lx)\n" -hex_msg: - .asciz " %016lx" ignore_int: SAVE_ALL movq %cr2,%rsi @@ -75,6 +75,12 @@ ignore_int: jnz 0b 1: jmp 1b + .section .init.rodata, "a", @progbits + +int_msg: + .asciz "Unknown interrupt (cr2=%016lx)\n" +hex_msg: + .asciz " %016lx" /*** DESCRIPTOR TABLES ***/ -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |