Skip to content

Commit b15378c

Browse files
Andi KleenKAGA-KOKO
authored andcommitted
x86/fsgsbase/64: Add intrinsics for FSGSBASE instructions
[ luto: Rename the variables from FS and GS to FSBASE and GSBASE and make <asm/fsgsbase.h> safe to include on 32-bit kernels. ] Signed-off-by: Andi Kleen <[email protected]> Signed-off-by: Andy Lutomirski <[email protected]> Signed-off-by: Chang S. Bae <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Signed-off-by: Sasha Levin <[email protected]> Signed-off-by: Thomas Gleixner <[email protected]> Reviewed-by: Andy Lutomirski <[email protected]> Reviewed-by: Andi Kleen <[email protected]> Link: https://lkml.kernel.org/r/[email protected] Link: https://lkml.kernel.org/r/[email protected]
1 parent dd649bd commit b15378c

File tree

1 file changed

+30
-0
lines changed

1 file changed

+30
-0
lines changed

arch/x86/include/asm/fsgsbase.h

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,36 @@ extern unsigned long x86_gsbase_read_task(struct task_struct *task);
1919
extern void x86_fsbase_write_task(struct task_struct *task, unsigned long fsbase);
2020
extern void x86_gsbase_write_task(struct task_struct *task, unsigned long gsbase);
2121

22+
/* Must be protected by X86_FEATURE_FSGSBASE check. */
23+
24+
static __always_inline unsigned long rdfsbase(void)
25+
{
26+
unsigned long fsbase;
27+
28+
asm volatile("rdfsbase %0" : "=r" (fsbase) :: "memory");
29+
30+
return fsbase;
31+
}
32+
33+
static __always_inline unsigned long rdgsbase(void)
34+
{
35+
unsigned long gsbase;
36+
37+
asm volatile("rdgsbase %0" : "=r" (gsbase) :: "memory");
38+
39+
return gsbase;
40+
}
41+
42+
static __always_inline void wrfsbase(unsigned long fsbase)
43+
{
44+
asm volatile("wrfsbase %0" :: "r" (fsbase) : "memory");
45+
}
46+
47+
static __always_inline void wrgsbase(unsigned long gsbase)
48+
{
49+
asm volatile("wrgsbase %0" :: "r" (gsbase) : "memory");
50+
}
51+
2252
/* Helper functions for reading/writing FS/GS base */
2353

2454
static inline unsigned long x86_fsbase_read_cpu(void)

0 commit comments

Comments
 (0)