All of lore.kernel.org
 help / color / mirror / Atom feed
From: "tip-bot2 for Thomas Gleixner" <tip-bot2@linutronix.de>
To: linux-tip-commits@vger.kernel.org
Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	x86@kernel.org, linux-kernel@vger.kernel.org
Subject: [tip: smp/core] x86/realmode: Make stack lock work in trampoline_compat()
Date: Tue, 30 May 2023 12:18:10 -0000	[thread overview]
Message-ID: <168544909088.404.150583934765484487.tip-bot2@tip-bot2> (raw)
In-Reply-To: <87h6rujdvl.ffs@tglx>

The following commit has been merged into the smp/core branch of tip:

Commit-ID:     33e20b07bec4991c169e3c6ff28c2126583724fc
Gitweb:        https://git.kernel.org/tip/33e20b07bec4991c169e3c6ff28c2126583724fc
Author:        Thomas Gleixner <tglx@linutronix.de>
AuthorDate:    Tue, 30 May 2023 12:46:22 +02:00
Committer:     Thomas Gleixner <tglx@linutronix.de>
CommitterDate: Tue, 30 May 2023 14:11:47 +02:00

x86/realmode: Make stack lock work in trampoline_compat()

The stack locking and stack assignment macro LOAD_REALMODE_ESP fails to
work when invoked from the 64bit trampoline entry point:

trampoline_start64
  trampoline_compat
    LOAD_REALMODE_ESP <- lock

Accessing tr_lock is only possible from 16bit mode. For the compat entry
point this needs to be pa_tr_lock so that the required relocation entry is
generated. Otherwise it locks the non-relocated address which is
aside of being wrong never cleared in secondary_startup_64() causing all
but the first CPU to get stuck on the lock.

Make the macro take an argument lock_pa which defaults to 0 and rename it
to LOCK_AND_LOAD_REALMODE_ESP to make it clear what this is about.

Fixes: f6f1ae9128d2 ("x86/smpboot: Implement a bit spinlock to protect the realmode stack")
Reported-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Link: https://lore.kernel.org/r/87h6rujdvl.ffs@tglx
---
 arch/x86/realmode/rm/trampoline_64.S | 12 ++++++++----
 1 file changed, 8 insertions(+), 4 deletions(-)

diff --git a/arch/x86/realmode/rm/trampoline_64.S b/arch/x86/realmode/rm/trampoline_64.S
index 4822ad2..c9f76fa 100644
--- a/arch/x86/realmode/rm/trampoline_64.S
+++ b/arch/x86/realmode/rm/trampoline_64.S
@@ -37,12 +37,16 @@
 	.text
 	.code16
 
-.macro LOAD_REALMODE_ESP
+.macro LOCK_AND_LOAD_REALMODE_ESP lock_pa=0
 	/*
 	 * Make sure only one CPU fiddles with the realmode stack
 	 */
 .Llock_rm\@:
+	.if \lock_pa
+        lock btsl       $0, pa_tr_lock
+	.else
         lock btsl       $0, tr_lock
+	.endif
         jnc             2f
         pause
         jmp             .Llock_rm\@
@@ -63,7 +67,7 @@ SYM_CODE_START(trampoline_start)
 	mov	%ax, %es
 	mov	%ax, %ss
 
-	LOAD_REALMODE_ESP
+	LOCK_AND_LOAD_REALMODE_ESP
 
 	call	verify_cpu		# Verify the cpu supports long mode
 	testl   %eax, %eax		# Check for return code
@@ -106,7 +110,7 @@ SYM_CODE_START(sev_es_trampoline_start)
 	mov	%ax, %es
 	mov	%ax, %ss
 
-	LOAD_REALMODE_ESP
+	LOCK_AND_LOAD_REALMODE_ESP
 
 	jmp	.Lswitch_to_protected
 SYM_CODE_END(sev_es_trampoline_start)
@@ -189,7 +193,7 @@ SYM_CODE_START(pa_trampoline_compat)
 	 * In compatibility mode.  Prep ESP and DX for startup_32, then disable
 	 * paging and complete the switch to legacy 32-bit mode.
 	 */
-	LOAD_REALMODE_ESP
+	LOCK_AND_LOAD_REALMODE_ESP lock_pa=1
 	movw	$__KERNEL_DS, %dx
 
 	movl	$(CR0_STATE & ~X86_CR0_PG), %eax

  parent reply	other threads:[~2023-05-30 12:18 UTC|newest]

Thread overview: 210+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-08 19:43 [patch v3 00/36] cpu/hotplug, x86: Reworked parallel CPU bringup Thomas Gleixner
2023-05-08 19:43 ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 01/36] [patch V2 01/38] x86/smpboot: Cleanup topology_phys_to_logical_pkg()/die() Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 02/36] cpu/hotplug: Mark arch_disable_smp_support() and bringup_nonboot_cpus() __init Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 03/36] x86/smpboot: Avoid pointless delay calibration if TSC is synchronized Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 04/36] x86/smpboot: Rename start_cpu0() to soft_restart_cpu() Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 05/36] x86/topology: Remove CPU0 hotplug option Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 06/36] x86/smpboot: Remove the CPU0 hotplug kludge Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 07/36] x86/smpboot: Restrict soft_restart_cpu() to SEV Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 08/36] x86/smpboot: Split up native_cpu_up() into separate phases and document them Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-09 10:04   ` Peter Zijlstra
2023-05-09 10:04     ` Peter Zijlstra
2023-05-09 12:07     ` Thomas Gleixner
2023-05-09 12:07       ` Thomas Gleixner
2023-05-09 17:59       ` Thomas Gleixner
2023-05-09 17:59         ` Thomas Gleixner
2023-05-09 20:11     ` Thomas Gleixner
2023-05-09 20:11       ` Thomas Gleixner
2023-05-10  8:39       ` Peter Zijlstra
2023-05-10  8:39         ` Peter Zijlstra
2023-05-09 10:19   ` Peter Zijlstra
2023-05-09 10:19     ` Peter Zijlstra
2023-05-09 12:08     ` Thomas Gleixner
2023-05-09 12:08       ` Thomas Gleixner
2023-05-09 18:03     ` Thomas Gleixner
2023-05-09 18:03       ` Thomas Gleixner
2023-05-09 10:31   ` Peter Zijlstra
2023-05-09 10:31     ` Peter Zijlstra
2023-05-09 12:09     ` Thomas Gleixner
2023-05-09 12:09       ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 09/36] x86/smpboot: Get rid of cpu_init_secondary() Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 10/36] [patch V2 10/38] x86/cpu/cacheinfo: Remove cpu_callout_mask dependency Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 11/36] [patch V2 11/38] x86/smpboot: Move synchronization masks to SMP boot code Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 12/36] [patch V2 12/38] x86/smpboot: Make TSC synchronization function call based Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 13/36] x86/smpboot: Remove cpu_callin_mask Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-09 10:49   ` Peter Zijlstra
2023-05-09 10:49     ` Peter Zijlstra
2023-05-09 12:09     ` Thomas Gleixner
2023-05-09 12:09       ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 14/36] [patch V2 14/38] cpu/hotplug: Rework sparse_irq locking in bringup_cpu() Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-09 11:02   ` Peter Zijlstra
2023-05-09 11:02     ` Peter Zijlstra
2023-05-09 12:10     ` Thomas Gleixner
2023-05-09 12:10       ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 15/36] x86/smpboot: Remove wait for cpu_online() Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 16/36] x86/xen/smp_pv: Remove wait for CPU online Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 17/36] x86/xen/hvm: Get rid of DEAD_FROZEN handling Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 18/36] [patch V2 18/38] cpu/hotplug: Add CPU state tracking and synchronization Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-09 11:07   ` Peter Zijlstra
2023-05-09 11:07     ` Peter Zijlstra
2023-05-09 11:35     ` Peter Zijlstra
2023-05-09 11:35       ` Peter Zijlstra
2023-05-09 12:12     ` Thomas Gleixner
2023-05-09 12:12       ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 19/36] x86/smpboot: Switch to hotplug core state synchronization Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:43 ` [patch v3 20/36] cpu/hotplug: Remove cpu_report_state() and related unused cruft Thomas Gleixner
2023-05-08 19:43   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 21/36] [patch V2 21/38] ARM: smp: Switch to hotplug core state synchronization Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 22/36] arm64: " Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 23/36] [patch V2 23/38] csky/smp: " Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 24/36] [patch V2 24/38] MIPS: SMP_CPS: " Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 25/36] parisc: " Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 26/36] riscv: " Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 27/36] cpu/hotplug: Remove unused state functions Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 28/36] cpu/hotplug: Reset task stack state in _cpu_up() Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 29/36] [patch V2 29/38] cpu/hotplug: Provide a split up CPUHP_BRINGUP mechanism Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 30/36] x86/smpboot: Enable split CPU startup Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 31/36] x86/apic: Provide cpu_primary_thread mask Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-24 20:48   ` Kirill A. Shutemov
2023-05-24 20:48     ` Kirill A. Shutemov
2023-05-24 20:48     ` Kirill A. Shutemov
2023-05-26 10:14     ` Thomas Gleixner
2023-05-26 10:14       ` Thomas Gleixner
2023-05-26 10:14       ` Thomas Gleixner
2023-05-27 13:40       ` Thomas Gleixner
2023-05-27 13:40         ` Thomas Gleixner
2023-05-27 13:40         ` Thomas Gleixner
2023-05-29  2:39         ` Kirill A. Shutemov
2023-05-29  2:39           ` Kirill A. Shutemov
2023-05-29  2:39           ` Kirill A. Shutemov
2023-05-29 19:27           ` Thomas Gleixner
2023-05-29 19:27             ` Thomas Gleixner
2023-05-29 19:27             ` Thomas Gleixner
2023-05-29 20:31             ` Kirill A. Shutemov
2023-05-29 20:31               ` Kirill A. Shutemov
2023-05-29 20:31               ` Kirill A. Shutemov
2023-05-30  0:54               ` Kirill A. Shutemov
2023-05-30  0:54                 ` Kirill A. Shutemov
2023-05-30  0:54                 ` Kirill A. Shutemov
2023-05-30  9:26                 ` Thomas Gleixner
2023-05-30  9:26                   ` Thomas Gleixner
2023-05-30  9:26                   ` Thomas Gleixner
2023-05-30 10:34                   ` Thomas Gleixner
2023-05-30 10:34                     ` Thomas Gleixner
2023-05-30 10:34                     ` Thomas Gleixner
2023-05-30 11:37                     ` Kirill A. Shutemov
2023-05-30 11:37                       ` Kirill A. Shutemov
2023-05-30 11:37                       ` Kirill A. Shutemov
2023-05-30 12:09                     ` [patch] x86/smpboot: Disable parallel bootup if cc_vendor != NONE Thomas Gleixner
2023-05-30 12:09                       ` Thomas Gleixner
2023-05-30 12:09                       ` Thomas Gleixner
2023-05-30 12:29                       ` Kirill A. Shutemov
2023-05-30 12:29                         ` Kirill A. Shutemov
2023-05-30 12:29                         ` Kirill A. Shutemov
2023-05-30 16:00                         ` Thomas Gleixner
2023-05-30 16:00                           ` Thomas Gleixner
2023-05-30 16:00                           ` Thomas Gleixner
2023-05-30 16:56                           ` Sean Christopherson
2023-05-30 16:56                             ` Sean Christopherson
2023-05-30 16:56                             ` Sean Christopherson
2023-05-30 19:51                             ` Thomas Gleixner
2023-05-30 19:51                               ` Thomas Gleixner
2023-05-30 19:51                               ` Thomas Gleixner
2023-05-30 20:03                               ` Tom Lendacky
2023-05-30 20:03                                 ` Tom Lendacky
2023-05-30 20:03                                 ` Tom Lendacky
2023-05-30 20:39                                 ` Thomas Gleixner
2023-05-30 20:39                                   ` Thomas Gleixner
2023-05-30 20:39                                   ` Thomas Gleixner
2023-05-30 21:13                                   ` Tom Lendacky
2023-05-30 21:13                                     ` Tom Lendacky
2023-05-30 21:13                                     ` Tom Lendacky
2023-05-31  7:44                                     ` [patch] x86/smpboot: Fix the parallel bringup decision Thomas Gleixner
2023-05-31  7:44                                       ` Thomas Gleixner
2023-05-31  7:44                                       ` Thomas Gleixner
2023-05-31 11:07                                       ` Kirill A. Shutemov
2023-05-31 11:07                                         ` Kirill A. Shutemov
2023-05-31 11:07                                         ` Kirill A. Shutemov
2023-05-31 13:58                                       ` Tom Lendacky
2023-05-31 13:58                                         ` Tom Lendacky
2023-05-31 13:58                                         ` Tom Lendacky
2023-05-31 14:57                                       ` [tip: smp/core] " tip-bot2 for Thomas Gleixner
2023-05-30 17:02                           ` [patch] x86/smpboot: Disable parallel bootup if cc_vendor != NONE Kirill A. Shutemov
2023-05-30 17:02                             ` Kirill A. Shutemov
2023-05-30 17:02                             ` Kirill A. Shutemov
2023-05-30 17:31                             ` Sean Christopherson
2023-05-30 17:31                               ` Sean Christopherson
2023-05-30 17:31                               ` Sean Christopherson
2023-05-30  9:26               ` [patch v3 31/36] x86/apic: Provide cpu_primary_thread mask Thomas Gleixner
2023-05-30  9:26                 ` Thomas Gleixner
2023-05-30  9:26                 ` Thomas Gleixner
2023-05-30 10:46               ` [patch] x86/realmode: Make stack lock work in trampoline_compat() Thomas Gleixner
2023-05-30 10:46                 ` Thomas Gleixner
2023-05-30 10:46                 ` Thomas Gleixner
2023-05-30 11:12                 ` Kirill A. Shutemov
2023-05-30 11:12                   ` Kirill A. Shutemov
2023-05-30 11:12                   ` Kirill A. Shutemov
2023-05-30 12:18                 ` tip-bot2 for Thomas Gleixner [this message]
2023-06-08 23:34                 ` Yunhong Jiang
2023-06-08 23:34                   ` Yunhong Jiang
2023-06-08 23:34                   ` Yunhong Jiang
2023-06-08 23:57                   ` Andrew Cooper
2023-06-08 23:57                     ` Andrew Cooper
2023-06-08 23:57                     ` Andrew Cooper
2023-06-09  0:22                     ` Yunhong Jiang
2023-06-09  0:22                       ` Yunhong Jiang
2023-06-09  0:22                       ` Yunhong Jiang
2023-06-10 19:50                     ` David Laight
2023-06-10 19:50                       ` David Laight
2023-06-10 22:51                       ` 'Andrew Cooper'
2023-06-10 22:51                         ` 'Andrew Cooper'
2023-05-29 19:39         ` [tip: smp/core] x86/smp: Initialize cpu_primary_thread_mask late tip-bot2 for Thomas Gleixner
2023-05-08 19:44 ` [patch v3 32/36] cpu/hotplug: Allow "parallel" bringup up to CPUHP_BP_KICK_AP_STATE Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 33/36] x86/apic: Save the APIC virtual base address Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-09  9:20   ` Sergey Shtylyov
2023-05-09  9:20     ` Sergey Shtylyov
2023-05-08 19:44 ` [patch v3 34/36] x86/smpboot: Implement a bit spinlock to protect the realmode stack Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-09 13:13   ` Peter Zijlstra
2023-05-09 13:13     ` Peter Zijlstra
2023-05-09 13:47     ` Thomas Gleixner
2023-05-09 13:47       ` Thomas Gleixner
2023-05-08 19:44 ` [patch v3 35/36] x86/smpboot: Support parallel startup of secondary CPUs Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner
2023-05-09 13:57   ` Peter Zijlstra
2023-05-09 13:57     ` Peter Zijlstra
2023-05-08 19:44 ` [patch v3 36/36] x86/smpboot/64: Implement arch_cpuhp_init_parallel_bringup() and enable it Thomas Gleixner
2023-05-08 19:44   ` Thomas Gleixner

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=168544909088.404.150583934765484487.tip-bot2@tip-bot2 \
    --to=tip-bot2@linutronix.de \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=tglx@linutronix.de \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.