sparc64: take fprs_write() and friends to start_thread()
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
This commit is contained in:
@@ -94,6 +94,7 @@ struct thread_struct {
|
|||||||
#ifndef __ASSEMBLY__
|
#ifndef __ASSEMBLY__
|
||||||
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
|
#include <asm/fpumacro.h>
|
||||||
|
|
||||||
/* Return saved PC of a blocked thread. */
|
/* Return saved PC of a blocked thread. */
|
||||||
struct task_struct;
|
struct task_struct;
|
||||||
@@ -143,6 +144,10 @@ do { \
|
|||||||
: \
|
: \
|
||||||
: "r" (regs), "r" (sp - sizeof(struct reg_window) - STACK_BIAS), \
|
: "r" (regs), "r" (sp - sizeof(struct reg_window) - STACK_BIAS), \
|
||||||
"i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0]))); \
|
"i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0]))); \
|
||||||
|
fprs_write(0); \
|
||||||
|
current_thread_info()->xfsr[0] = 0; \
|
||||||
|
current_thread_info()->fpsaved[0] = 0; \
|
||||||
|
regs->tstate &= ~TSTATE_PEF; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
#define start_thread32(regs, pc, sp) \
|
#define start_thread32(regs, pc, sp) \
|
||||||
@@ -183,6 +188,10 @@ do { \
|
|||||||
: \
|
: \
|
||||||
: "r" (regs), "r" (sp - sizeof(struct reg_window32)), \
|
: "r" (regs), "r" (sp - sizeof(struct reg_window32)), \
|
||||||
"i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0]))); \
|
"i" ((const unsigned long)(&((struct pt_regs *)0)->u_regs[0]))); \
|
||||||
|
fprs_write(0); \
|
||||||
|
current_thread_info()->xfsr[0] = 0; \
|
||||||
|
current_thread_info()->fpsaved[0] = 0; \
|
||||||
|
regs->tstate &= ~TSTATE_PEF; \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
/* Free all resources held by a thread. */
|
/* Free all resources held by a thread. */
|
||||||
|
|||||||
@@ -692,12 +692,6 @@ asmlinkage int sparc_execve(struct pt_regs *regs)
|
|||||||
(const char __user *const __user *)
|
(const char __user *const __user *)
|
||||||
regs->u_regs[base + UREG_I2], regs);
|
regs->u_regs[base + UREG_I2], regs);
|
||||||
putname(filename);
|
putname(filename);
|
||||||
if (!error) {
|
|
||||||
fprs_write(0);
|
|
||||||
current_thread_info()->xfsr[0] = 0;
|
|
||||||
current_thread_info()->fpsaved[0] = 0;
|
|
||||||
regs->tstate &= ~TSTATE_PEF;
|
|
||||||
}
|
|
||||||
out:
|
out:
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -421,13 +421,6 @@ asmlinkage long sparc32_execve(struct pt_regs *regs)
|
|||||||
compat_ptr(regs->u_regs[base + UREG_I2]), regs);
|
compat_ptr(regs->u_regs[base + UREG_I2]), regs);
|
||||||
|
|
||||||
putname(filename);
|
putname(filename);
|
||||||
|
|
||||||
if (!error) {
|
|
||||||
fprs_write(0);
|
|
||||||
current_thread_info()->xfsr[0] = 0;
|
|
||||||
current_thread_info()->fpsaved[0] = 0;
|
|
||||||
regs->tstate &= ~TSTATE_PEF;
|
|
||||||
}
|
|
||||||
out:
|
out:
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user