summaryrefslogtreecommitdiffstats
path: root/arch/x86/kernel/xsave.c
diff options
context:
space:
mode:
authorFenghua Yu2014-05-29 20:12:42 +0200
committerH. Peter Anvin2014-05-29 23:33:06 +0200
commit47c2f292cc8669f70644a949cadd5fa5ee0e0e07 (patch)
tree6bbc5ede81eca14c21a445ae018dc874cb7fc97a /arch/x86/kernel/xsave.c
parentx86/xsaves: Save xstate to task's xsave area in __save_fpu during booting time (diff)
downloadkernel-qcow2-linux-47c2f292cc8669f70644a949cadd5fa5ee0e0e07.tar.gz
kernel-qcow2-linux-47c2f292cc8669f70644a949cadd5fa5ee0e0e07.tar.xz
kernel-qcow2-linux-47c2f292cc8669f70644a949cadd5fa5ee0e0e07.zip
x86/xsaves: Call booting time xsaves and xrstors in setup_init_fpu_buf
setup_init_fpu_buf() calls booting time xsaves and xrstors to save and restore xstate in xsave area. Signed-off-by: Fenghua Yu <fenghua.yu@intel.com> Link: http://lkml.kernel.org/r/1401387164-43416-15-git-send-email-fenghua.yu@intel.com Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
Diffstat (limited to 'arch/x86/kernel/xsave.c')
-rw-r--r--arch/x86/kernel/xsave.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c
index a4b451c6addf..8fa7c7d4183d 100644
--- a/arch/x86/kernel/xsave.c
+++ b/arch/x86/kernel/xsave.c
@@ -496,15 +496,21 @@ static void __init setup_init_fpu_buf(void)
setup_xstate_features();
+ if (cpu_has_xsaves) {
+ init_xstate_buf->xsave_hdr.xcomp_bv =
+ (u64)1 << 63 | pcntxt_mask;
+ init_xstate_buf->xsave_hdr.xstate_bv = pcntxt_mask;
+ }
+
/*
* Init all the features state with header_bv being 0x0
*/
- xrstor_state(init_xstate_buf, -1);
+ xrstor_state_booting(init_xstate_buf, -1);
/*
* Dump the init state again. This is to identify the init state
* of any feature which is not represented by all zero's.
*/
- xsave_state(init_xstate_buf, -1);
+ xsave_state_booting(init_xstate_buf, -1);
}
static enum { AUTO, ENABLE, DISABLE } eagerfpu = AUTO;