summaryrefslogtreecommitdiffstats
path: root/arch/x86/math-emu/fpu_aux.c
diff options
context:
space:
mode:
authorIngo Molnar <mingo@elte.hu>2009-03-08 16:48:51 +0100
committerIngo Molnar <mingo@elte.hu>2009-03-08 16:48:51 +0100
commitdba58e39ced7af63f2748d12bbb2b4ac83c72391 (patch)
treeee15a5e7667b51d0d0f7e8cb39064652f7c84c28 /arch/x86/math-emu/fpu_aux.c
parent9de36825b321fe9fe9cf73260554251af579f4ca (diff)
parent78ff7fae04554b49d29226ed12536268c2500d1f (diff)
downloadlinux-dba58e39ced7af63f2748d12bbb2b4ac83c72391.tar.gz
linux-dba58e39ced7af63f2748d12bbb2b4ac83c72391.tar.bz2
linux-dba58e39ced7af63f2748d12bbb2b4ac83c72391.zip
Merge branches 'tracing/doc', 'tracing/ftrace', 'tracing/printk' and 'tracing/textedit' into tracing/core
Diffstat (limited to 'arch/x86/math-emu/fpu_aux.c')
-rw-r--r--arch/x86/math-emu/fpu_aux.c31
1 files changed, 20 insertions, 11 deletions
diff --git a/arch/x86/math-emu/fpu_aux.c b/arch/x86/math-emu/fpu_aux.c
index 491e737ce547..aa0987088774 100644
--- a/arch/x86/math-emu/fpu_aux.c
+++ b/arch/x86/math-emu/fpu_aux.c
@@ -30,20 +30,29 @@ static void fclex(void)
}
/* Needs to be externally visible */
-void finit(void)
+void finit_task(struct task_struct *tsk)
{
- control_word = 0x037f;
- partial_status = 0;
- top = 0; /* We don't keep top in the status word internally. */
- fpu_tag_word = 0xffff;
+ struct i387_soft_struct *soft = &tsk->thread.xstate->soft;
+ struct address *oaddr, *iaddr;
+ soft->cwd = 0x037f;
+ soft->swd = 0;
+ soft->ftop = 0; /* We don't keep top in the status word internally. */
+ soft->twd = 0xffff;
/* The behaviour is different from that detailed in
Section 15.1.6 of the Intel manual */
- operand_address.offset = 0;
- operand_address.selector = 0;
- instruction_address.offset = 0;
- instruction_address.selector = 0;
- instruction_address.opcode = 0;
- no_ip_update = 1;
+ oaddr = (struct address *)&soft->foo;
+ oaddr->offset = 0;
+ oaddr->selector = 0;
+ iaddr = (struct address *)&soft->fip;
+ iaddr->offset = 0;
+ iaddr->selector = 0;
+ iaddr->opcode = 0;
+ soft->no_update = 1;
+}
+
+void finit(void)
+{
+ finit_task(current);
}
/*