#include <linux/smp.h>
#include <linux/smp_lock.h>
#include <linux/binfmts.h> /* do_coredum */
+#include <linux/bitops.h>
#include <asm/uaccess.h>
-#include <asm/bitops.h>
#include <asm/ptrace.h>
#include <asm/svr4.h>
#include <asm/pgalloc.h>
regs->psr &= ~PSR_EF;
}
#endif
- current->used_math = 1;
+ set_used_math();
clear_tsk_thread_flag(current, TIF_USEDFPU);
if (verify_area(VERIFY_READ, fpu, sizeof(*fpu)))
sig_address = NULL;
}
}
- err |= __put_user((long)sig_address, &sframep->sig_address);
+ err |= __put_user((unsigned long)sig_address, &sframep->sig_address);
err |= __put_user(sig_code, &sframep->sig_code);
err |= __put_user(sc, &sframep->sig_scptr);
if (err)
¤t->thread.fpqueue[0],
((sizeof(unsigned long) +
(sizeof(unsigned long *)))*16));
- current->used_math = 0;
+ clear_used_math();
return err;
}
synchronize_user_stack();
sigframe_size = NF_ALIGNEDSZ;
- if (!current->used_math)
+ if (!used_math())
sigframe_size -= sizeof(__siginfo_fpu_t);
sf = (struct new_signal_frame __user *)
err |= __put_user(0, &sf->extra_size);
- if (current->used_math) {
+ if (used_math()) {
err |= save_fpu_state(regs, &sf->fpu_state);
err |= __put_user(&sf->fpu_state, &sf->fpu_save);
} else {
synchronize_user_stack();
sigframe_size = RT_ALIGNEDSZ;
- if (!current->used_math)
+ if (!used_math())
sigframe_size -= sizeof(__siginfo_fpu_t);
sf = (struct rt_signal_frame __user *)
get_sigframe(&ka->sa, regs, sigframe_size);
err |= __put_user(regs->npc, &sf->regs.npc);
err |= __put_user(regs->y, &sf->regs.y);
psr = regs->psr;
- if (current->used_math)
+ if (used_math())
psr |= PSR_EF;
err |= __put_user(psr, &sf->regs.psr);
err |= __copy_to_user(&sf->regs.u_regs, regs->u_regs, sizeof(regs->u_regs));
* to flush the user windows.
*/
for (window = 0; window < tp->w_saved; window++) {
- err |= __put_user((int *) &(gw->win[window]), &gw->winptr[window]);
+ err |= __put_user((int __user *) &(gw->win[window]), &gw->winptr[window]);
err |= __copy_to_user(&gw->win[window],
&tp->reg_window[window],
sizeof(svr4_rwindow_t));
sigsegv_and_return:
force_sig(SIGSEGV, current);
+ return -EFAULT;
}
static inline void