|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH 3/4] 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.code 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.code. Furthermore, its
strings can move to init.data.
Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CC: Keir Fraser <keir@xxxxxxx>
CC: Jan Beulich <JBeulich@xxxxxxxx>
---
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..0c086b2 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"
+
+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.data, "aw", @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 |