summaryrefslogtreecommitdiff
path: root/arch/x86/kernel/xsave.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2012-02-28 12:42:14 +0000
committerArnd Bergmann <arnd@arndb.de>2012-02-28 12:42:21 +0000
commitfb0b82b32ce17564bc64cede50bf4a3204eecc60 (patch)
tree00b5e466074c6fb373d64c493b3341186024acc7 /arch/x86/kernel/xsave.c
parenta173fc693b25216c5c834978f4fafd731fd4ff94 (diff)
parent43de6a7dda6e9a7345e218e688f2092f991126f0 (diff)
Merge branch 'board-specific' of git://github.com/hzhuang1/linux into next/boards
* 'board-specific' of git://github.com/hzhuang1/linux: (5 commits) ARM: pxa: add dummy clock for pxa25x and pxa27x ARM: mmp: append irq name of gpio device pxa/hx4700: Fix PXA_GPIO_IRQ_BASE/IRQ_NUM values pxa/hx4700: Add ASIC3 LED support pxa/hx4700: Correct StrataFlash block size discovery (update to v3.3-rc5)
Diffstat (limited to 'arch/x86/kernel/xsave.c')
-rw-r--r--arch/x86/kernel/xsave.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/arch/x86/kernel/xsave.c b/arch/x86/kernel/xsave.c
index a3911343976..71109111411 100644
--- a/arch/x86/kernel/xsave.c
+++ b/arch/x86/kernel/xsave.c
@@ -47,7 +47,7 @@ void __sanitize_i387_state(struct task_struct *tsk)
if (!fx)
return;
- BUG_ON(task_thread_info(tsk)->status & TS_USEDFPU);
+ BUG_ON(__thread_has_fpu(tsk));
xstate_bv = tsk->thread.fpu.state->xsave.xsave_hdr.xstate_bv;
@@ -168,7 +168,7 @@ int save_i387_xstate(void __user *buf)
if (!used_math())
return 0;
- if (task_thread_info(tsk)->status & TS_USEDFPU) {
+ if (user_has_fpu()) {
if (use_xsave())
err = xsave_user(buf);
else
@@ -176,8 +176,7 @@ int save_i387_xstate(void __user *buf)
if (err)
return err;
- task_thread_info(tsk)->status &= ~TS_USEDFPU;
- stts();
+ user_fpu_end();
} else {
sanitize_i387_state(tsk);
if (__copy_to_user(buf, &tsk->thread.fpu.state->fxsave,
@@ -292,10 +291,7 @@ int restore_i387_xstate(void __user *buf)
return err;
}
- if (!(task_thread_info(current)->status & TS_USEDFPU)) {
- clts();
- task_thread_info(current)->status |= TS_USEDFPU;
- }
+ user_fpu_begin();
if (use_xsave())
err = restore_user_xstate(buf);
else