]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blame - arch/x86/include/asm/fsgsbase.h
Merge branch 'x86-platform-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[mirror_ubuntu-hirsute-kernel.git] / arch / x86 / include / asm / fsgsbase.h
CommitLineData
b1378a56
CB
1/* SPDX-License-Identifier: GPL-2.0 */
2#ifndef _ASM_FSGSBASE_H
ec3a9418 3#define _ASM_FSGSBASE_H
b1378a56
CB
4
5#ifndef __ASSEMBLY__
6
7#ifdef CONFIG_X86_64
8
9#include <asm/msr-index.h>
10
b1378a56 11/*
ec3a9418 12 * Read/write a task's FSBASE or GSBASE. This returns the value that
b1378a56 13 * the FS/GS base would have (if the task were to be resumed). These
ec3a9418
IM
14 * work on the current task or on a non-running (typically stopped
15 * ptrace child) task.
b1378a56 16 */
ec3a9418
IM
17extern unsigned long x86_fsbase_read_task(struct task_struct *task);
18extern unsigned long x86_gsbase_read_task(struct task_struct *task);
87ab4689
CB
19extern void x86_fsbase_write_task(struct task_struct *task, unsigned long fsbase);
20extern void x86_gsbase_write_task(struct task_struct *task, unsigned long gsbase);
b1378a56
CB
21
22/* Helper functions for reading/writing FS/GS base */
23
24static inline unsigned long x86_fsbase_read_cpu(void)
25{
26 unsigned long fsbase;
27
28 rdmsrl(MSR_FS_BASE, fsbase);
ec3a9418 29
b1378a56
CB
30 return fsbase;
31}
32
b1378a56
CB
33static inline unsigned long x86_gsbase_read_cpu_inactive(void)
34{
35 unsigned long gsbase;
36
37 rdmsrl(MSR_KERNEL_GS_BASE, gsbase);
ec3a9418 38
b1378a56
CB
39 return gsbase;
40}
41
87ab4689
CB
42static inline void x86_fsbase_write_cpu(unsigned long fsbase)
43{
44 wrmsrl(MSR_FS_BASE, fsbase);
45}
46
47static inline void x86_gsbase_write_cpu_inactive(unsigned long gsbase)
48{
49 wrmsrl(MSR_KERNEL_GS_BASE, gsbase);
50}
b1378a56
CB
51
52#endif /* CONFIG_X86_64 */
53
54#endif /* __ASSEMBLY__ */
55
56#endif /* _ASM_FSGSBASE_H */