aboutsummaryrefslogtreecommitdiffstats
path: root/arch/sh/kernel/ptrace_32.c
diff options
context:
space:
mode:
authorMichael Trimarchi <trimarchi@gandalf.sssup.it>2009-04-03 13:32:33 -0400
committerPaul Mundt <lethal@linux-sh.org>2009-04-04 11:48:11 -0400
commit01ab10393c510342ec4ce85df11ccfa3df06bbb2 (patch)
treeebf0493fa7b53941f830f8b300037f834eb85e59 /arch/sh/kernel/ptrace_32.c
parenta27873cd234b4248dda342721d6262943e5fa235 (diff)
sh: Fix up DSP context save/restore.
There were a number of issues with the DSP context save/restore code, mostly left-over relics from when it was introduced on SH3-DSP with little follow-up testing, resulting in things like task_pt_dspregs() referencing incorrect state on the stack. This follows the MIPS convention of tracking the DSP state in the thread_struct and handling the state save/restore in switch_to() and finish_arch_switch() respectively. The regset interface is also updated, which allows us to finally be rid of task_pt_dspregs() and the special cased task_pt_regs(). Signed-off-by: Michael Trimarchi <michael@evidence.eu.com> Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'arch/sh/kernel/ptrace_32.c')
-rw-r--r--arch/sh/kernel/ptrace_32.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/sh/kernel/ptrace_32.c b/arch/sh/kernel/ptrace_32.c
index 29ca09d24ef8..f7b22dd83b0c 100644
--- a/arch/sh/kernel/ptrace_32.c
+++ b/arch/sh/kernel/ptrace_32.c
@@ -200,7 +200,8 @@ static int dspregs_get(struct task_struct *target,
200 unsigned int pos, unsigned int count, 200 unsigned int pos, unsigned int count,
201 void *kbuf, void __user *ubuf) 201 void *kbuf, void __user *ubuf)
202{ 202{
203 const struct pt_dspregs *regs = task_pt_dspregs(target); 203 const struct pt_dspregs *regs =
204 (struct pt_dspregs *)&target->thread.dsp_status.dsp_regs;
204 int ret; 205 int ret;
205 206
206 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, regs, 207 ret = user_regset_copyout(&pos, &count, &kbuf, &ubuf, regs,
@@ -217,7 +218,8 @@ static int dspregs_set(struct task_struct *target,
217 unsigned int pos, unsigned int count, 218 unsigned int pos, unsigned int count,
218 const void *kbuf, const void __user *ubuf) 219 const void *kbuf, const void __user *ubuf)
219{ 220{
220 struct pt_dspregs *regs = task_pt_dspregs(target); 221 struct pt_dspregs *regs =
222 (struct pt_dspregs *)&target->thread.dsp_status.dsp_regs;
221 int ret; 223 int ret;
222 224
223 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, regs, 225 ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, regs,