|
@@ -168,12 +168,13 @@ static int copy_sc_from_user(struct pt_regs *regs,
|
|
|
struct sigcontext __user *from)
|
|
|
{
|
|
|
struct sigcontext sc;
|
|
|
- int err;
|
|
|
+ int err, pid;
|
|
|
|
|
|
err = copy_from_user(&sc, from, sizeof(sc));
|
|
|
if (err)
|
|
|
return err;
|
|
|
|
|
|
+ pid = userspace_pid[current_thread_info()->cpu];
|
|
|
copy_sc(®s->regs, &sc);
|
|
|
if (have_fpx_regs) {
|
|
|
struct user_fxsr_struct fpx;
|
|
@@ -187,8 +188,7 @@ static int copy_sc_from_user(struct pt_regs *regs,
|
|
|
if (err)
|
|
|
return 1;
|
|
|
|
|
|
- err = restore_fpx_registers(userspace_pid[current_thread->cpu],
|
|
|
- (unsigned long *) &fpx);
|
|
|
+ err = restore_fpx_registers(pid, (unsigned long *) &fpx);
|
|
|
if (err < 0) {
|
|
|
printk(KERN_ERR "copy_sc_from_user - "
|
|
|
"restore_fpx_registers failed, errno = %d\n",
|
|
@@ -204,8 +204,7 @@ static int copy_sc_from_user(struct pt_regs *regs,
|
|
|
if (err)
|
|
|
return 1;
|
|
|
|
|
|
- err = restore_fp_registers(userspace_pid[current_thread->cpu],
|
|
|
- (unsigned long *) &fp);
|
|
|
+ err = restore_fp_registers(pid, (unsigned long *) &fp);
|
|
|
if (err < 0) {
|
|
|
printk(KERN_ERR "copy_sc_from_user - "
|
|
|
"restore_fp_registers failed, errno = %d\n",
|
|
@@ -223,7 +222,7 @@ static int copy_sc_to_user(struct sigcontext __user *to,
|
|
|
{
|
|
|
struct sigcontext sc;
|
|
|
struct faultinfo * fi = ¤t->thread.arch.faultinfo;
|
|
|
- int err;
|
|
|
+ int err, pid;
|
|
|
|
|
|
sc.gs = REGS_GS(regs->regs.gp);
|
|
|
sc.fs = REGS_FS(regs->regs.gp);
|
|
@@ -249,11 +248,11 @@ static int copy_sc_to_user(struct sigcontext __user *to,
|
|
|
to_fp = (to_fp ? to_fp : (struct _fpstate __user *) (to + 1));
|
|
|
sc.fpstate = to_fp;
|
|
|
|
|
|
+ pid = userspace_pid[current_thread_info()->cpu];
|
|
|
if (have_fpx_regs) {
|
|
|
struct user_fxsr_struct fpx;
|
|
|
|
|
|
- err = save_fpx_registers(userspace_pid[current_thread->cpu],
|
|
|
- (unsigned long *) &fpx);
|
|
|
+ err = save_fpx_registers(pid, (unsigned long *) &fpx);
|
|
|
if (err < 0){
|
|
|
printk(KERN_ERR "copy_sc_to_user - save_fpx_registers "
|
|
|
"failed, errno = %d\n", err);
|
|
@@ -276,8 +275,7 @@ static int copy_sc_to_user(struct sigcontext __user *to,
|
|
|
else {
|
|
|
struct user_i387_struct fp;
|
|
|
|
|
|
- err = save_fp_registers(userspace_pid[current_thread->cpu],
|
|
|
- (unsigned long *) &fp);
|
|
|
+ err = save_fp_registers(pid, (unsigned long *) &fp);
|
|
|
if (copy_to_user(to_fp, &fp, sizeof(struct user_i387_struct)))
|
|
|
return 1;
|
|
|
}
|