aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-x86/xsave.h
diff options
context:
space:
mode:
authorSuresh Siddha <suresh.b.siddha@intel.com>2008-07-29 13:29:25 -0400
committerIngo Molnar <mingo@elte.hu>2008-07-30 13:49:27 -0400
commitc37b5efea43f9e500363f9973dd00e3d2cdcc685 (patch)
tree9ce635f1672099dafcd78e535b4ea18d80235d8f /include/asm-x86/xsave.h
parentbdd8caba5ed5bb7ee21c9f061597284ffeb280bf (diff)
x86, xsave: save/restore the extended state context in sigframe
On cpu's supporting xsave/xrstor, fpstate pointer in the sigcontext, will include the extended state information along with fpstate information. Presence of extended state information is indicated by the presence of FP_XSTATE_MAGIC1 at fpstate.sw_reserved.magic1 and FP_XSTATE_MAGIC2 at fpstate + (fpstate.sw_reserved.extended_size - FP_XSTATE_MAGIC2_SIZE). Extended feature bit mask that is saved in the memory layout is represented by the fpstate.sw_reserved.xstate_bv For RT signal frames, UC_FP_XSTATE in the uc_flags also indicate the presence of extended state information in the sigcontext's fpstate pointer. Signed-off-by: Suresh Siddha <suresh.b.siddha@intel.com> Signed-off-by: H. Peter Anvin <hpa@zytor.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'include/asm-x86/xsave.h')
-rw-r--r--include/asm-x86/xsave.h5
1 files changed, 4 insertions, 1 deletions
diff --git a/include/asm-x86/xsave.h b/include/asm-x86/xsave.h
index b716511aede2..b7f64b9fcd94 100644
--- a/include/asm-x86/xsave.h
+++ b/include/asm-x86/xsave.h
@@ -29,6 +29,9 @@ extern struct xsave_struct *init_xstate_buf;
29extern void xsave_cntxt_init(void); 29extern void xsave_cntxt_init(void);
30extern void xsave_init(void); 30extern void xsave_init(void);
31extern int init_fpu(struct task_struct *child); 31extern int init_fpu(struct task_struct *child);
32extern int check_for_xstate(struct i387_fxsave_struct __user *buf,
33 void __user *fpstate,
34 struct _fpx_sw_bytes *sw);
32 35
33static inline int xrstor_checking(struct xsave_struct *fx) 36static inline int xrstor_checking(struct xsave_struct *fx)
34{ 37{
@@ -48,7 +51,7 @@ static inline int xrstor_checking(struct xsave_struct *fx)
48 return err; 51 return err;
49} 52}
50 53
51static inline int xsave_check(struct xsave_struct __user *buf) 54static inline int xsave_user(struct xsave_struct __user *buf)
52{ 55{
53 int err; 56 int err;
54 __asm__ __volatile__("1: .byte " REX_PREFIX "0x0f,0xae,0x27\n" 57 __asm__ __volatile__("1: .byte " REX_PREFIX "0x0f,0xae,0x27\n"