Commit 51edbe6a authored by H. Peter Anvin's avatar H. Peter Anvin
Browse files

x86, realmode: Move not-common bits out of trampoline_common.S



Move the bits that aren't actually common out of trampoline_common.S
and into the arch-specific files.  Furthermore, make sure the page
directory is first in the .bss section for trampoline_64.S in order to
not waste an entire page of memory.

Signed-off-by: default avatarH. Peter Anvin <hpa@linux.intel.com>
Cc: Jarkko Sakkinen <jarkko.sakkinen@intel.com>
parent 79603879
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -63,4 +63,12 @@ ENTRY(trampoline_start)
ENTRY(startup_32)			# note: also used from wakeup_asm.S
	jmp	*%eax

	.bss
	.balign 8
GLOBAL(trampoline_header)
	tr_start:		.space	4
	tr_gdt_pad:		.space	2
	tr_gdt:			.space	6
END(trampoline_header)
	
#include "trampoline_common.S"
+25 −0
Original line number Diff line number Diff line
@@ -125,4 +125,29 @@ ENTRY(startup_64)
	# Now jump into the kernel using virtual addresses
	jmpq	*tr_start(%rip)

	.section ".rodata","a"
	# Duplicate the global descriptor table
	# so the kernel can live anywhere
	.balign	16
	.globl tr_gdt
tr_gdt:
	.short	tr_gdt_end - tr_gdt - 1	# gdt limit
	.long	pa_tr_gdt
	.short	0
	.quad	0x00cf9b000000ffff	# __KERNEL32_CS
	.quad	0x00af9b000000ffff	# __KERNEL_CS
	.quad	0x00cf93000000ffff	# __KERNEL_DS
tr_gdt_end:

	.bss
	.balign	PAGE_SIZE
GLOBAL(trampoline_pgd)		.space	PAGE_SIZE

	.balign	8
GLOBAL(trampoline_header)
	tr_start:		.space	8
	GLOBAL(tr_cr4)		.space	4
	GLOBAL(tr_efer)		.space	8
END(trampoline_header)

#include "trampoline_common.S"
+0 −35
Original line number Diff line number Diff line
	.section ".rodata","a"

#ifdef CONFIG_X86_64
	# Duplicate the global descriptor table
	# so the kernel can live anywhere
	.balign	16
	.globl tr_gdt
tr_gdt:
	.short	tr_gdt_end - tr_gdt - 1	# gdt limit
	.long	pa_tr_gdt
	.short	0
	.quad	0x00cf9b000000ffff	# __KERNEL32_CS
	.quad	0x00af9b000000ffff	# __KERNEL_CS
	.quad	0x00cf93000000ffff	# __KERNEL_DS
tr_gdt_end:
#endif

	.balign	4
tr_idt: .fill 1, 6, 0

	.bss

	.balign	4
GLOBAL(trampoline_status)	.space	4

	.balign	8
GLOBAL(trampoline_header)
#ifdef CONFIG_X86_32
	tr_start:		.space	4
	tr_gdt_pad:		.space	2
	tr_gdt:			.space	6
#else
	tr_start:		.space	8
	GLOBAL(tr_cr4)		.space	4
	GLOBAL(tr_efer)		.space	8
#endif
END(trampoline_header)

#ifdef CONFIG_X86_64
	.balign	PAGE_SIZE
GLOBAL(trampoline_pgd)		.space	PAGE_SIZE
#endif