#ifndef __X86_KERNEL_FPU_XSTATE_H
#define __X86_KERNEL_FPU_XSTATE_H
#include <asm/cpufeature.h>
#include <asm/fpu/xstate.h>
#include <asm/fpu/xcr.h>
#ifdef CONFIG_X86_64
DECLARE_PER_CPU(u64, xfd_state);
#endif
static inline void xstate_init_xcomp_bv(struct xregs_state *xsave, u64 mask)
{ … }
static inline u64 xstate_get_group_perm(bool guest)
{ … }
static inline u64 xstate_get_host_group_perm(void)
{ … }
enum xstate_copy_mode { … };
struct membuf;
extern void __copy_xstate_to_uabi_buf(struct membuf to, struct fpstate *fpstate,
u64 xfeatures, u32 pkru_val,
enum xstate_copy_mode copy_mode);
extern void copy_xstate_to_uabi_buf(struct membuf to, struct task_struct *tsk,
enum xstate_copy_mode mode);
extern int copy_uabi_from_kernel_to_xstate(struct fpstate *fpstate, const void *kbuf, u32 *pkru);
extern int copy_sigframe_from_user_to_xstate(struct task_struct *tsk, const void __user *ubuf);
extern void fpu__init_cpu_xstate(void);
extern void fpu__init_system_xstate(unsigned int legacy_size);
extern void __user *get_xsave_addr_user(struct xregs_state __user *xsave, int xfeature_nr);
static inline u64 xfeatures_mask_supervisor(void)
{ … }
static inline u64 xfeatures_mask_independent(void)
{ … }
#ifdef CONFIG_X86_64
#define REX_PREFIX …
#else
#define REX_PREFIX
#endif
#define XSAVE …
#define XSAVEOPT …
#define XSAVEC …
#define XSAVES …
#define XRSTOR …
#define XRSTORS …
#define XSTATE_OP(op, st, lmask, hmask, err) …
#define XSTATE_XSAVE(st, lmask, hmask, err) …
#define XSTATE_XRESTORE(st, lmask, hmask) …
#if defined(CONFIG_X86_64) && defined(CONFIG_X86_DEBUG_FPU)
extern void xfd_validate_state(struct fpstate *fpstate, u64 mask, bool rstor);
#else
static inline void xfd_validate_state(struct fpstate *fpstate, u64 mask, bool rstor) { }
#endif
#ifdef CONFIG_X86_64
static inline void xfd_set_state(u64 xfd)
{ … }
static inline void xfd_update_state(struct fpstate *fpstate)
{ … }
extern int __xfd_enable_feature(u64 which, struct fpu_guest *guest_fpu);
#else
static inline void xfd_set_state(u64 xfd) { }
static inline void xfd_update_state(struct fpstate *fpstate) { }
static inline int __xfd_enable_feature(u64 which, struct fpu_guest *guest_fpu) {
return -EPERM;
}
#endif
static inline void os_xsave(struct fpstate *fpstate)
{ … }
static inline void os_xrstor(struct fpstate *fpstate, u64 mask)
{ … }
static inline void os_xrstor_supervisor(struct fpstate *fpstate)
{ … }
static inline u64 xfeatures_need_sigframe_write(void)
{ … }
static inline int xsave_to_user_sigframe(struct xregs_state __user *buf)
{ … }
static inline int xrstor_from_user_sigframe(struct xregs_state __user *buf, u64 mask)
{ … }
static inline int os_xrstor_safe(struct fpstate *fpstate, u64 mask)
{ … }
#endif