Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8c7e58e6 authored by Brian Gerst's avatar Brian Gerst Committed by Tejun Heo
Browse files

x86: rework __per_cpu_load adjustments



Impact: cleanup

Use cpu_number to determine if the adjustment is necessary.

Signed-off-by: default avatarBrian Gerst <brgerst@gmail.com>
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parent 0bd74fa8
Loading
Loading
Loading
Loading
+8 −16
Original line number Diff line number Diff line
@@ -207,19 +207,15 @@ ENTRY(secondary_startup_64)

#ifdef CONFIG_SMP
	/*
	 * early_gdt_base should point to the gdt_page in static percpu init
	 * data area.  Computing this requires two symbols - __per_cpu_load
	 * and per_cpu__gdt_page.  As linker can't do no such relocation, do
	 * it by hand.  As early_gdt_descr is manipulated by C code for
	 * secondary CPUs, this should be done only once for the boot CPU
	 * when early_gdt_descr_base contains zero.
	 * Fix up static pointers that need __per_cpu_load added.  The assembler
	 * is unable to do this directly.  This is only needed for the boot cpu.
	 * These values are set up with the correct base addresses by C code for
	 * secondary cpus.
	 */
	movq	early_gdt_descr_base(%rip), %rax
	testq	%rax, %rax
	jnz	1f
	movq	$__per_cpu_load, %rax
	addq	$per_cpu__gdt_page, %rax
	movq	%rax, early_gdt_descr_base(%rip)
	movq	initial_gs(%rip), %rax
	cmpl	$0, per_cpu__cpu_number(%rax)
	jne	1f
	addq	%rax, early_gdt_descr_base(%rip)
1:
#endif
	/*
@@ -431,12 +427,8 @@ NEXT_PAGE(level2_spare_pgt)
	.globl early_gdt_descr
early_gdt_descr:
	.word	GDT_ENTRIES*8-1
#ifdef CONFIG_SMP
early_gdt_descr_base:
	.quad   0x0000000000000000
#else
	.quad	per_cpu__gdt_page
#endif

ENTRY(phys_base)
	/* This must match the first entry in level2_kernel_pgt */