From: Uros Bizjak Date: Mon, 30 Mar 2026 05:57:42 +0000 (+0200) Subject: x86/asm/fsgsbase: Remove unnecessary "memory" clobbers from FS/GS base (read-) accessors X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d9576c9cd6a3056435e8e974c36ef576816a6c99;p=thirdparty%2Fkernel%2Flinux.git x86/asm/fsgsbase: Remove unnecessary "memory" clobbers from FS/GS base (read-) accessors 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 Signed-off-by: Ingo Molnar Acked-by: Peter Zijlstra (Intel) Cc: Linus Torvalds Cc: H. Peter Anvin Link: https://patch.msgid.link/20260330055823.5793-1-ubizjak@gmail.com --- diff --git a/arch/x86/include/asm/fsgsbase.h b/arch/x86/include/asm/fsgsbase.h index ab2547f97c2cd..70ff4ef457b1e 100644 --- a/arch/x86/include/asm/fsgsbase.h +++ b/arch/x86/include/asm/fsgsbase.h @@ -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; }