public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Brian Gerst <brgerst@gmail.com>
To: linux-kernel@vger.kernel.org, x86@kernel.org
Cc: Ingo Molnar <mingo@kernel.org>,
	Thomas Gleixner <tglx@linutronix.de>,
	Borislav Petkov <bp@alien8.de>, "H . Peter Anvin" <hpa@zytor.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Uros Bizjak <ubizjak@gmail.com>, Brian Gerst <brgerst@gmail.com>
Subject: [PATCH v2 06/11] x86/percpu/64: Remove fixed_percpu_data
Date: Thu, 26 Oct 2023 12:00:55 -0400	[thread overview]
Message-ID: <20231026160100.195099-7-brgerst@gmail.com> (raw)
In-Reply-To: <20231026160100.195099-1-brgerst@gmail.com>

Now that the stack protector canary value is a normal percpu variable,
fixed_percpu_data is unused and can be removed.

Signed-off-by: Brian Gerst <brgerst@gmail.com>
---
 arch/x86/include/asm/processor.h | 13 +++++--------
 arch/x86/kernel/cpu/common.c     |  4 ----
 arch/x86/kernel/head_64.S        | 11 ++++++-----
 arch/x86/kernel/vmlinux.lds.S    |  6 ------
 arch/x86/platform/pvh/head.S     |  7 ++++++-
 arch/x86/tools/relocs.c          |  1 -
 arch/x86/xen/xen-head.S          | 11 ++++++++---
 7 files changed, 25 insertions(+), 28 deletions(-)

diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 2b6531d90273..d5a4044dba8f 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -393,16 +393,13 @@ struct irq_stack {
 } __aligned(IRQ_STACK_SIZE);
 
 #ifdef CONFIG_X86_64
-struct fixed_percpu_data {
-	char		gs_base[40];
-};
-
-DECLARE_PER_CPU_FIRST(struct fixed_percpu_data, fixed_percpu_data) __visible;
-DECLARE_INIT_PER_CPU(fixed_percpu_data);
-
 static inline unsigned long cpu_kernelmode_gs_base(int cpu)
 {
-	return (unsigned long)per_cpu(fixed_percpu_data.gs_base, cpu);
+#ifdef CONFIG_SMP
+	return per_cpu_offset(cpu);
+#else
+	return 0;
+#endif
 }
 
 extern asmlinkage void entry_SYSCALL32_ignore(void);
diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
index fb8f0371ffc3..32ae76cf4508 100644
--- a/arch/x86/kernel/cpu/common.c
+++ b/arch/x86/kernel/cpu/common.c
@@ -2052,10 +2052,6 @@ EXPORT_PER_CPU_SYMBOL(pcpu_hot);
 EXPORT_PER_CPU_SYMBOL(const_pcpu_hot);
 
 #ifdef CONFIG_X86_64
-DEFINE_PER_CPU_FIRST(struct fixed_percpu_data,
-		     fixed_percpu_data) __aligned(PAGE_SIZE) __visible;
-EXPORT_PER_CPU_SYMBOL_GPL(fixed_percpu_data);
-
 static void wrmsrl_cstar(unsigned long val)
 {
 	/*
diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
index 0d94d2a091fe..f2453eb38417 100644
--- a/arch/x86/kernel/head_64.S
+++ b/arch/x86/kernel/head_64.S
@@ -72,9 +72,14 @@ SYM_CODE_START_NOALIGN(startup_64)
 
 	/* Setup GSBASE to allow stack canary access for C code */
 	movl	$MSR_GS_BASE, %ecx
-	leaq	INIT_PER_CPU_VAR(fixed_percpu_data)(%rip), %rdx
+#ifdef CONFIG_SMP
+	leaq	__per_cpu_load(%rip), %rdx
 	movl	%edx, %eax
 	shrq	$32,  %rdx
+#else
+	xorl	%eax, %eax
+	xorl	%edx, %edx
+#endif
 	wrmsr
 
 	call	startup_64_setup_env
@@ -345,14 +350,10 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
 
 	/* Set up %gs.
 	 *
-	 * The base of %gs always points to fixed_percpu_data.
 	 * Note that, on SMP, the boot cpu uses init data section until
 	 * the per cpu areas are set up.
 	 */
 	movl	$MSR_GS_BASE,%ecx
-#ifndef CONFIG_SMP
-	leaq	INIT_PER_CPU_VAR(fixed_percpu_data)(%rip), %rdx
-#endif
 	movl	%edx, %eax
 	shrq	$32, %rdx
 	wrmsr
diff --git a/arch/x86/kernel/vmlinux.lds.S b/arch/x86/kernel/vmlinux.lds.S
index 1239be7cc8d8..e6126cd21615 100644
--- a/arch/x86/kernel/vmlinux.lds.S
+++ b/arch/x86/kernel/vmlinux.lds.S
@@ -510,14 +510,8 @@ SECTIONS
  */
 #define INIT_PER_CPU(x) init_per_cpu__##x = ABSOLUTE(x) + __per_cpu_load
 INIT_PER_CPU(gdt_page);
-INIT_PER_CPU(fixed_percpu_data);
 INIT_PER_CPU(irq_stack_backing_store);
 
-#ifdef CONFIG_SMP
-. = ASSERT((fixed_percpu_data == 0),
-           "fixed_percpu_data is not at start of per-cpu area");
-#endif
-
 #ifdef CONFIG_CPU_UNRET_ENTRY
 . = ASSERT((retbleed_return_thunk & 0x3f) == 0, "retbleed_return_thunk not cacheline-aligned");
 #endif
diff --git a/arch/x86/platform/pvh/head.S b/arch/x86/platform/pvh/head.S
index be8d973c0528..d215b16bf89f 100644
--- a/arch/x86/platform/pvh/head.S
+++ b/arch/x86/platform/pvh/head.S
@@ -96,9 +96,14 @@ SYM_CODE_START_LOCAL(pvh_start_xen)
 1:
 	/* Set base address in stack canary descriptor. */
 	mov $MSR_GS_BASE,%ecx
-	lea INIT_PER_CPU_VAR(fixed_percpu_data)(%rip), %rdx
+#ifdef CONFIG_SMP
+	lea __per_cpu_load(%rip), %rdx
 	mov %edx, %eax
 	shr $32, %rdx
+#else
+	xor %eax, %eax
+	xor %edx, %edx
+#endif
 	wrmsr
 
 	call xen_prepare_pvh
diff --git a/arch/x86/tools/relocs.c b/arch/x86/tools/relocs.c
index d30949e25ebd..3ccd9d4fcf9c 100644
--- a/arch/x86/tools/relocs.c
+++ b/arch/x86/tools/relocs.c
@@ -811,7 +811,6 @@ static void percpu_init(void)
  *	__per_cpu_load
  *
  * The "gold" linker incorrectly associates:
- *	init_per_cpu__fixed_percpu_data
  *	init_per_cpu__gdt_page
  */
 static int is_percpu_sym(ElfW(Sym) *sym, const char *symname)
diff --git a/arch/x86/xen/xen-head.S b/arch/x86/xen/xen-head.S
index 30f27e757354..9ce0d9d268bb 100644
--- a/arch/x86/xen/xen-head.S
+++ b/arch/x86/xen/xen-head.S
@@ -53,13 +53,18 @@ SYM_CODE_START(startup_xen)
 
 	/* Set up %gs.
 	 *
-	 * The base of %gs always points to fixed_percpu_data.
 	 * Note that, on SMP, the boot cpu uses init data section until
 	 * the per cpu areas are set up.
 	 */
 	movl	$MSR_GS_BASE,%ecx
-	movq	$INIT_PER_CPU_VAR(fixed_percpu_data),%rax
-	cdq
+#ifdef CONFIG_SMP
+	leaq	__per_cpu_load(%rip), %rdx
+	movl	%edx, %eax
+	shrq	$32, %rdx
+#else
+	xorl	%eax, %eax
+	xorl	%edx, %edx
+#endif
 	wrmsr
 
 	mov	%rsi, %rdi
-- 
2.41.0


  parent reply	other threads:[~2023-10-26 16:01 UTC|newest]

Thread overview: 32+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-10-26 16:00 [PATCH v2 00/11] x86-64: Stack protector and percpu improvements Brian Gerst
2023-10-26 16:00 ` [PATCH v2 01/11] x86/stackprotector/32: Remove stack protector test script Brian Gerst
2023-10-26 17:59   ` Uros Bizjak
2023-10-26 16:00 ` [PATCH v2 02/11] x86/stackprotector/64: " Brian Gerst
2023-10-26 18:06   ` Uros Bizjak
2023-10-26 16:00 ` [PATCH v2 03/11] x86/boot: Disable stack protector for early boot code Brian Gerst
2023-10-26 16:00 ` [PATCH v2 04/11] x86/pvh: Use fixed_percpu_data for early boot GSBASE Brian Gerst
2023-10-26 16:00 ` [PATCH v2 05/11] x86/stackprotector/64: Convert stack protector to normal percpu variable Brian Gerst
2023-10-26 18:16   ` Uros Bizjak
2023-10-29  1:26   ` kernel test robot
2023-10-29  6:56     ` Brian Gerst
2023-10-29 17:00       ` Brian Gerst
2023-10-30 15:24         ` Nick Desaulniers
2023-10-30 17:19           ` Brian Gerst
2023-11-01 21:21             ` Fangrui Song
2023-10-26 16:00 ` Brian Gerst [this message]
2023-10-26 18:28   ` [PATCH v2 06/11] x86/percpu/64: Remove fixed_percpu_data Uros Bizjak
2023-10-26 16:00 ` [PATCH v2 07/11] x86/percpu/64: Use relative percpu offsets Brian Gerst
2023-10-26 18:47   ` Uros Bizjak
2023-10-27  2:09     ` Brian Gerst
2023-10-27  6:09       ` Uros Bizjak
2023-10-26 16:00 ` [PATCH v2 08/11] x86/boot/64: Remove inverse relocations Brian Gerst
2023-10-26 16:00 ` [PATCH v2 09/11] x86/percpu/64: Remove INIT_PER_CPU macros Brian Gerst
2023-10-26 18:48   ` Uros Bizjak
2023-10-26 16:00 ` [PATCH v2 10/11] percpu: Remove PER_CPU_FIRST_SECTION Brian Gerst
2023-10-26 18:51   ` Uros Bizjak
2023-10-26 16:01 ` [PATCH v2 11/11] kallsyms: Remove KALLSYMS_ABSOLUTE_PERCPU Brian Gerst
2023-10-29 21:42 ` [PATCH v2 00/11] x86-64: Stack protector and percpu improvements David Laight
2023-10-29 23:19   ` Brian Gerst
2023-10-30  8:06   ` Uros Bizjak
2023-10-30  9:05     ` David Laight
2023-10-30  9:10       ` Uros Bizjak

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20231026160100.195099-7-brgerst@gmail.com \
    --to=brgerst@gmail.com \
    --cc=bp@alien8.de \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@kernel.org \
    --cc=peterz@infradead.org \
    --cc=tglx@linutronix.de \
    --cc=ubizjak@gmail.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox