[PATCH] x86/asm: Use RDPKRU and WRPKRU mnemonics in <asm/special_insns.h>

Uros Bizjak posted 1 patch 3 months, 3 weeks ago
There is a newer version of this series
arch/x86/include/asm/special_insns.h | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
[PATCH] x86/asm: Use RDPKRU and WRPKRU mnemonics in <asm/special_insns.h>
Posted by Uros Bizjak 3 months, 3 weeks ago
Current minimum required version of binutils is 2.30,
which supports RDPKRU and WRPKRU instruction mnemonics.

Replace the byte-wise specification of RDPKRU and
WRPKRU with these proper mnemonics.

No functional change intended.

Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Dave Hansen <dave.hansen@linux.intel.com>
Cc: "H. Peter Anvin" <hpa@zytor.com>
---
 arch/x86/include/asm/special_insns.h | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/arch/x86/include/asm/special_insns.h b/arch/x86/include/asm/special_insns.h
index ecda17efa042..13e272e1a53f 100644
--- a/arch/x86/include/asm/special_insns.h
+++ b/arch/x86/include/asm/special_insns.h
@@ -75,9 +75,7 @@ static inline u32 rdpkru(void)
 	 * "rdpkru" instruction.  Places PKRU contents in to EAX,
 	 * clears EDX and requires that ecx=0.
 	 */
-	asm volatile(".byte 0x0f,0x01,0xee\n\t"
-		     : "=a" (pkru), "=d" (edx)
-		     : "c" (ecx));
+	asm volatile("rdpkru" : "=a" (pkru), "=d" (edx) : "c" (ecx));
 	return pkru;
 }
 
@@ -89,8 +87,7 @@ static inline void wrpkru(u32 pkru)
 	 * "wrpkru" instruction.  Loads contents in EAX to PKRU,
 	 * requires that ecx = edx = 0.
 	 */
-	asm volatile(".byte 0x0f,0x01,0xef\n\t"
-		     : : "a" (pkru), "c"(ecx), "d"(edx));
+	asm volatile("wrpkru" : : "a" (pkru), "c"(ecx), "d"(edx));
 }
 
 #else
-- 
2.49.0
Re: [PATCH] x86/asm: Use RDPKRU and WRPKRU mnemonics in <asm/special_insns.h>
Posted by Peter Zijlstra 3 months, 3 weeks ago
On Mon, Jun 16, 2025 at 10:35:57AM +0200, Uros Bizjak wrote:
> Current minimum required version of binutils is 2.30,
> which supports RDPKRU and WRPKRU instruction mnemonics.
> 
> Replace the byte-wise specification of RDPKRU and
> WRPKRU with these proper mnemonics.

What about the minimal clang version and their integrated assembler?
Re: [PATCH] x86/asm: Use RDPKRU and WRPKRU mnemonics in <asm/special_insns.h>
Posted by Uros Bizjak 3 months, 3 weeks ago
On Mon, Jun 16, 2025 at 10:39 AM Peter Zijlstra <peterz@infradead.org> wrote:
>
> On Mon, Jun 16, 2025 at 10:35:57AM +0200, Uros Bizjak wrote:
> > Current minimum required version of binutils is 2.30,
> > which supports RDPKRU and WRPKRU instruction mnemonics.
> >
> > Replace the byte-wise specification of RDPKRU and
> > WRPKRU with these proper mnemonics.
>
> What about the minimal clang version and their integrated assembler?

Yes, it works with the minimum required clang version 13.0.1.

Uros.
Re: [PATCH] x86/asm: Use RDPKRU and WRPKRU mnemonics in <asm/special_insns.h>
Posted by Peter Zijlstra 3 months, 3 weeks ago
On Mon, Jun 16, 2025 at 10:47:58AM +0200, Uros Bizjak wrote:
> On Mon, Jun 16, 2025 at 10:39 AM Peter Zijlstra <peterz@infradead.org> wrote:
> >
> > On Mon, Jun 16, 2025 at 10:35:57AM +0200, Uros Bizjak wrote:
> > > Current minimum required version of binutils is 2.30,
> > > which supports RDPKRU and WRPKRU instruction mnemonics.
> > >
> > > Replace the byte-wise specification of RDPKRU and
> > > WRPKRU with these proper mnemonics.
> >
> > What about the minimal clang version and their integrated assembler?
> 
> Yes, it works with the minimum required clang version 13.0.1.

Excellent!

Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
[tip: x86/cleanups] x86/asm: Use RDPKRU and WRPKRU mnemonics in <asm/special_insns.h>
Posted by tip-bot2 for Uros Bizjak 1 month, 2 weeks ago
The following commit has been merged into the x86/cleanups branch of tip:

Commit-ID:     966f504977e3a04fcadbaf199e3302e95e8958b7
Gitweb:        https://git.kernel.org/tip/966f504977e3a04fcadbaf199e3302e95e8958b7
Author:        Uros Bizjak <ubizjak@gmail.com>
AuthorDate:    Mon, 16 Jun 2025 10:35:57 +02:00
Committer:     Borislav Petkov (AMD) <bp@alien8.de>
CommitterDate: Fri, 22 Aug 2025 18:54:07 +02:00

x86/asm: Use RDPKRU and WRPKRU mnemonics in <asm/special_insns.h>

Current minimum required version of binutils is 2.30, which supports RDPKRU and
WRPKRU instruction mnemonics.

Replace the byte-wise specification of RDPKRU and WRPKRU with these proper
mnemonics.

No functional change intended.

Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lore.kernel.org/20250616083611.157740-1-ubizjak@gmail.com
---
 arch/x86/include/asm/special_insns.h | 7 ++-----
 1 file changed, 2 insertions(+), 5 deletions(-)

diff --git a/arch/x86/include/asm/special_insns.h b/arch/x86/include/asm/special_insns.h
index fde2bd7..c999145 100644
--- a/arch/x86/include/asm/special_insns.h
+++ b/arch/x86/include/asm/special_insns.h
@@ -75,9 +75,7 @@ static inline u32 rdpkru(void)
 	 * "rdpkru" instruction.  Places PKRU contents in to EAX,
 	 * clears EDX and requires that ecx=0.
 	 */
-	asm volatile(".byte 0x0f,0x01,0xee\n\t"
-		     : "=a" (pkru), "=d" (edx)
-		     : "c" (ecx));
+	asm volatile("rdpkru" : "=a" (pkru), "=d" (edx) : "c" (ecx));
 	return pkru;
 }
 
@@ -89,8 +87,7 @@ static inline void wrpkru(u32 pkru)
 	 * "wrpkru" instruction.  Loads contents in EAX to PKRU,
 	 * requires that ecx = edx = 0.
 	 */
-	asm volatile(".byte 0x0f,0x01,0xef\n\t"
-		     : : "a" (pkru), "c"(ecx), "d"(edx));
+	asm volatile("wrpkru" : : "a" (pkru), "c"(ecx), "d"(edx));
 }
 
 #else