]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
x86/asm/fsgsbase: Remove unnecessary "memory" clobbers from FS/GS base (read-) accessors
authorUros Bizjak <ubizjak@gmail.com>
Mon, 30 Mar 2026 05:57:42 +0000 (07:57 +0200)
committerIngo Molnar <mingo@kernel.org>
Mon, 30 Mar 2026 07:10:15 +0000 (09:10 +0200)
The rdfsbase() and rdgsbase() helpers currently include a "memory"
clobber in their inline assembly definitions. However, the RDFSBASE
and RDGSBASE instructions only read the FS/GS base MSRs into a
general-purpose register and do not access memory. The "memory" clobber,
which acts as a compiler barrier and may inhibit optimization,
is therefore unnecessary.

The "memory" clobber was historically used as a scheduling constraint
to prevent the compiler from moving the instructions before preceding
segment register loads. This is not required because both the segment
register loads and the RDFSBASE/RDGSBASE accessors are implemented
with `asm volatile`, which already prevents reordering between them.

No functional change intended.

Signed-off-by: Uros Bizjak <ubizjak@gmail.com>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Link: https://patch.msgid.link/20260330055823.5793-1-ubizjak@gmail.com
arch/x86/include/asm/fsgsbase.h

index ab2547f97c2cd7ec78a047d39dc337540ac30710..70ff4ef457b1e02922a0776ac0dced55a02904f6 100644 (file)
@@ -25,7 +25,7 @@ static __always_inline unsigned long rdfsbase(void)
 {
        unsigned long fsbase;
 
-       asm volatile("rdfsbase %0" : "=r" (fsbase) :: "memory");
+       asm volatile("rdfsbase %0" : "=r" (fsbase));
 
        return fsbase;
 }
@@ -34,7 +34,7 @@ static __always_inline unsigned long rdgsbase(void)
 {
        unsigned long gsbase;
 
-       asm volatile("rdgsbase %0" : "=r" (gsbase) :: "memory");
+       asm volatile("rdgsbase %0" : "=r" (gsbase));
 
        return gsbase;
 }