All of lore.kernel.org
 help / color / mirror / Atom feed
From: Borislav Petkov <bp@kernel.org>
To: X86 ML <x86@kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	"Borislav Petkov (AMD)" <bp@alien8.de>
Subject: [PATCH v1 10/14] x86/alternative: Convert ALTERNATIVE_3()
Date: Fri,  7 Jun 2024 13:16:57 +0200	[thread overview]
Message-ID: <20240607111701.8366-11-bp@kernel.org> (raw)
In-Reply-To: <20240607111701.8366-1-bp@kernel.org>

From: "Borislav Petkov (AMD)" <bp@alien8.de>

Zap the hack of using an ALTERNATIVE_3() internal label, as suggested by
bgerst:

  https://lore.kernel.org/r/CAMzpN2i4oJ-Dv0qO46Fd-DxNv5z9=x%2BvO%2B8g=47NiiAf8QEJYA@mail.gmail.com

in favor of a label local to this macro only, as it should be done.

Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
---
 arch/x86/include/asm/alternative.h | 24 ++++--------------------
 arch/x86/kernel/fpu/xstate.h       | 14 +++++---------
 2 files changed, 9 insertions(+), 29 deletions(-)

diff --git a/arch/x86/include/asm/alternative.h b/arch/x86/include/asm/alternative.h
index 007baab32c14..fba12ad237e2 100644
--- a/arch/x86/include/asm/alternative.h
+++ b/arch/x86/include/asm/alternative.h
@@ -277,26 +277,10 @@ static inline int alternatives_text_reserved(void *start, void *end)
 	N_ALTERNATIVE_2(oldinstr, newinstr_no, X86_FEATURE_ALWAYS,	\
 		      newinstr_yes, ft_flags)
 
-#define ALTERNATIVE_3(oldinsn, newinsn1, ft_flags1, newinsn2, ft_flags2, \
-			newinsn3, ft_flags3)				\
-	OLDINSTR_3(oldinsn, 1, 2, 3)					\
-	".pushsection .altinstructions,\"a\"\n"				\
-	ALTINSTR_ENTRY(ft_flags1, 1)					\
-	ALTINSTR_ENTRY(ft_flags2, 2)					\
-	ALTINSTR_ENTRY(ft_flags3, 3)					\
-	".popsection\n"							\
-	".pushsection .altinstr_replacement, \"ax\"\n"			\
-	ALTINSTR_REPLACEMENT(newinsn1, 1)				\
-	ALTINSTR_REPLACEMENT(newinsn2, 2)				\
-	ALTINSTR_REPLACEMENT(newinsn3, 3)				\
-	".popsection\n"
-
-
-#define N_ALTERNATIVE_3(oldinst, newinst1, flag1, newinst2, flag2,	\
-		      newinst3, flag3)					\
-	N_ALTERNATIVE(N_ALTERNATIVE_2(oldinst, newinst1, flag1, newinst2, flag2), \
-		      newinst3, flag3)
-
+#define ALTERNATIVE_3(oldinstr, newinstr1, ft_flags1, newinstr2, ft_flags2, \
+			newinstr3, ft_flags3)				\
+	N_ALTERNATIVE(N_ALTERNATIVE_2(oldinstr, newinstr1, ft_flags1, newinstr2, ft_flags2), \
+		      newinstr3, ft_flags3)
 /*
  * Alternative instructions for different CPU types or capabilities.
  *
diff --git a/arch/x86/kernel/fpu/xstate.h b/arch/x86/kernel/fpu/xstate.h
index 05df04f39628..2ee0b9c53dcc 100644
--- a/arch/x86/kernel/fpu/xstate.h
+++ b/arch/x86/kernel/fpu/xstate.h
@@ -106,21 +106,17 @@ static inline u64 xfeatures_mask_independent(void)
  * Otherwise, if XSAVEOPT is enabled, XSAVEOPT replaces XSAVE because XSAVEOPT
  * supports modified optimization which is not supported by XSAVE.
  *
- * We use XSAVE as a fallback.
- *
- * The 661 label is defined in the ALTERNATIVE* macros as the address of the
- * original instruction which gets replaced. We need to use it here as the
- * address of the instruction where we might get an exception at.
+ * Use XSAVE as a fallback.
  */
 #define XSTATE_XSAVE(st, lmask, hmask, err)				\
-	asm volatile(ALTERNATIVE_3(XSAVE,				\
+	asm volatile("1: " ALTERNATIVE_3(XSAVE,				\
 				   XSAVEOPT, X86_FEATURE_XSAVEOPT,	\
 				   XSAVEC,   X86_FEATURE_XSAVEC,	\
 				   XSAVES,   X86_FEATURE_XSAVES)	\
 		     "\n"						\
 		     "xor %[err], %[err]\n"				\
 		     "3:\n"						\
-		     _ASM_EXTABLE_TYPE_REG(661b, 3b, EX_TYPE_EFAULT_REG, %[err]) \
+		     _ASM_EXTABLE_TYPE_REG(1b, 3b, EX_TYPE_EFAULT_REG, %[err]) \
 		     : [err] "=r" (err)					\
 		     : "D" (st), "m" (*st), "a" (lmask), "d" (hmask)	\
 		     : "memory")
@@ -130,11 +126,11 @@ static inline u64 xfeatures_mask_independent(void)
  * XSAVE area format.
  */
 #define XSTATE_XRESTORE(st, lmask, hmask)				\
-	asm volatile(ALTERNATIVE(XRSTOR,				\
+	asm volatile("1: " ALTERNATIVE(XRSTOR,				\
 				 XRSTORS, X86_FEATURE_XSAVES)		\
 		     "\n"						\
 		     "3:\n"						\
-		     _ASM_EXTABLE_TYPE(661b, 3b, EX_TYPE_FPU_RESTORE)	\
+		     _ASM_EXTABLE_TYPE(1b, 3b, EX_TYPE_FPU_RESTORE)	\
 		     :							\
 		     : "D" (st), "m" (*st), "a" (lmask), "d" (hmask)	\
 		     : "memory")
-- 
2.43.0


  parent reply	other threads:[~2024-06-07 11:17 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-07 11:16 [PATCH v1 00/14] x86/alternatives: Nest them Borislav Petkov
2024-06-07 11:16 ` [PATCH v1 01/14] x86/alternative: Zap alternative_ternary() Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:16 ` [PATCH v1 02/14] x86/alternatives: Add nested alternatives macros Borislav Petkov
2024-06-07 11:16 ` [PATCH v1 03/14] x86/alternative: Convert alternative() Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:16 ` [PATCH v1 04/14] x86/alternative: Convert alternative_2() Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:16 ` [PATCH v1 05/14] x86/alternative: Convert alternative_input() Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:16 ` [PATCH v1 06/14] x86/alternative: Convert alternative_io() Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:16 ` [PATCH v1 07/14] x86/alternative: Convert alternative_call() Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:16 ` [PATCH v1 08/14] x86/alternative: Convert alternative_call_2() Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:16 ` [PATCH v1 09/14] x86/alternative: Convert ALTERNATIVE_TERNARY() Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:16 ` Borislav Petkov [this message]
2024-06-11 16:53   ` [tip: x86/alternatives] x86/alternative: Convert ALTERNATIVE_3() tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:16 ` [PATCH v1 11/14] x86/alternative: Convert the asm ALTERNATIVE() macro Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:16 ` [PATCH v1 12/14] x86/alternative: Convert the asm ALTERNATIVE_2() macro Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:17 ` [PATCH v1 13/14] x86/alternative: Convert the asm ALTERNATIVE_3() macro Borislav Petkov
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-07 11:17 ` [PATCH v1 14/14] x86/alternative: Replace the old macros Borislav Petkov
2024-06-11 13:25   ` Peter Zijlstra
2024-06-11 16:53   ` [tip: x86/alternatives] " tip-bot2 for Borislav Petkov (AMD)
2024-06-11 13:26 ` [PATCH v1 00/14] x86/alternatives: Nest them Peter Zijlstra
2024-06-11 14:05   ` Borislav Petkov

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=20240607111701.8366-11-bp@kernel.org \
    --to=bp@kernel.org \
    --cc=bp@alien8.de \
    --cc=linux-kernel@vger.kernel.org \
    --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.