diff options
author | Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com> | 2008-11-05 18:30:25 -0800 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-11-06 08:01:59 +0100 |
commit | 4b33669e817a01dd99ff91df330d504ccfb2e99c (patch) | |
tree | 1c03ba9d6a66b1f1d4f724f01ab7aa3824a94d9c /arch/x86/kernel | |
parent | 124ffe1456d6efea5b32cc6d36e3fa434cdc84d9 (diff) |
x86: signal_32: do save_i387_xstate() at get_sigframe()
Impact: cleanup
move calling save_i387_xstate() into get_sigframe() from setup_sigcontext()
like 64bit.
Signed-off-by: Hiroshi Shimamoto <h-shimamoto@ct.jp.nec.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r-- | arch/x86/kernel/signal_32.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/arch/x86/kernel/signal_32.c b/arch/x86/kernel/signal_32.c index a0efc1b3c4c..6a05c74b408 100644 --- a/arch/x86/kernel/signal_32.c +++ b/arch/x86/kernel/signal_32.c @@ -303,11 +303,7 @@ setup_sigcontext(struct sigcontext __user *sc, void __user *fpstate, err |= __put_user(regs->sp, &sc->sp_at_signal); err |= __put_user(regs->ss, (unsigned int __user *)&sc->ss); - tmp = save_i387_xstate(fpstate); - if (tmp < 0) - err = 1; - else - err |= __put_user(tmp ? fpstate : NULL, &sc->fpstate); + err |= __put_user(fpstate, &sc->fpstate); /* non-iBCS2 extensions.. */ err |= __put_user(mask, &sc->oldmask); @@ -350,6 +346,8 @@ get_sigframe(struct k_sigaction *ka, struct pt_regs *regs, size_t frame_size, if (used_math()) { sp = sp - sig_xstate_size; *fpstate = (struct _fpstate *) sp; + if (save_i387_xstate(*fpstate) < 0) + return (void __user *)-1L; } sp -= frame_size; |