[PATCH] mips: task_pt_regs()

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Al Viro and committed by Linus Torvalds 40bc9c67 6450578f

+12 -20
+1 -3
arch/mips/kernel/process.c
··· 229 229 230 230 int dump_task_regs (struct task_struct *tsk, elf_gregset_t *regs) 231 231 { 232 - struct thread_info *ti = tsk->thread_info; 233 - long ksp = (unsigned long)ti + THREAD_SIZE - 32; 234 - elf_dump_regs(&(*regs)[0], (struct pt_regs *) ksp - 1); 232 + elf_dump_regs(*regs, task_pt_regs(tsk)); 235 233 return 1; 236 234 } 237 235
+4 -8
arch/mips/kernel/ptrace.c
··· 64 64 if (!access_ok(VERIFY_WRITE, data, 38 * 8)) 65 65 return -EIO; 66 66 67 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 68 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 67 + regs = task_pt_regs(child); 69 68 70 69 for (i = 0; i < 32; i++) 71 70 __put_user (regs->regs[i], data + i); ··· 91 92 if (!access_ok(VERIFY_READ, data, 38 * 8)) 92 93 return -EIO; 93 94 94 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 95 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 95 + regs = task_pt_regs(child); 96 96 97 97 for (i = 0; i < 32; i++) 98 98 __get_user (regs->regs[i], data + i); ··· 196 198 struct pt_regs *regs; 197 199 unsigned long tmp = 0; 198 200 199 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 200 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 201 + regs = task_pt_regs(child); 201 202 ret = 0; /* Default return value. */ 202 203 203 204 switch (addr) { ··· 311 314 case PTRACE_POKEUSR: { 312 315 struct pt_regs *regs; 313 316 ret = 0; 314 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 315 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 317 + regs = task_pt_regs(child); 316 318 317 319 switch (addr) { 318 320 case 0 ... 31:
+2 -4
arch/mips/kernel/ptrace32.c
··· 126 126 struct pt_regs *regs; 127 127 unsigned int tmp; 128 128 129 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 130 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 129 + regs = task_pt_regs(child); 131 130 ret = 0; /* Default return value. */ 132 131 133 132 switch (addr) { ··· 258 259 case PTRACE_POKEUSR: { 259 260 struct pt_regs *regs; 260 261 ret = 0; 261 - regs = (struct pt_regs *) ((unsigned long) child->thread_info + 262 - THREAD_SIZE - 32 - sizeof(struct pt_regs)); 262 + regs = task_pt_regs(child); 263 263 264 264 switch (addr) { 265 265 case 0 ... 31:
+4 -4
include/asm-mips/processor.h
··· 200 200 201 201 unsigned long get_wchan(struct task_struct *p); 202 202 203 - #define __PT_REG(reg) ((long)&((struct pt_regs *)0)->reg - sizeof(struct pt_regs)) 204 203 #define __KSTK_TOS(tsk) ((unsigned long)(tsk->thread_info) + THREAD_SIZE - 32) 205 - #define KSTK_EIP(tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_epc))) 206 - #define KSTK_ESP(tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(regs[29]))) 207 - #define KSTK_STATUS(tsk) (*(unsigned long *)(__KSTK_TOS(tsk) + __PT_REG(cp0_status))) 204 + #define task_pt_regs(tsk) ((struct pt_regs *)__KSTK_TOS(tsk) - 1) 205 + #define KSTK_EIP(tsk) (task_pt_regs(tsk)->cp0_epc) 206 + #define KSTK_ESP(tsk) (task_pt_regs(tsk)->regs[29]) 207 + #define KSTK_STATUS(tsk) (task_pt_regs(tsk)->cp0_status) 208 208 209 209 #define cpu_relax() barrier() 210 210
+1 -1
include/asm-mips/system.h
··· 159 159 do { \ 160 160 if (cpu_has_dsp) \ 161 161 __save_dsp(prev); \ 162 - (last) = resume(prev, next, next->thread_info); \ 162 + (last) = resume(prev, next, task_thread_info(next)); \ 163 163 if (cpu_has_dsp) \ 164 164 __restore_dsp(current); \ 165 165 } while(0)