[PATCH] xtensa: task_pt_regs(), task_stack_page()

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 04fe6faf 30af7120

+13 -13
+2 -2
arch/xtensa/kernel/process.c
··· 145 int user_mode = user_mode(regs); 146 147 /* Set up new TSS. */ 148 - tos = (unsigned long)p->thread_info + THREAD_SIZE; 149 if (user_mode) 150 childregs = (struct pt_regs*)(tos - PT_USER_SIZE); 151 else ··· 217 unsigned long get_wchan(struct task_struct *p) 218 { 219 unsigned long sp, pc; 220 - unsigned long stack_page = (unsigned long) p->thread_info; 221 int count = 0; 222 223 if (!p || p == current || p->state == TASK_RUNNING)
··· 145 int user_mode = user_mode(regs); 146 147 /* Set up new TSS. */ 148 + tos = (unsigned long)task_stack_page(p) + THREAD_SIZE; 149 if (user_mode) 150 childregs = (struct pt_regs*)(tos - PT_USER_SIZE); 151 else ··· 217 unsigned long get_wchan(struct task_struct *p) 218 { 219 unsigned long sp, pc; 220 + unsigned long stack_page = (unsigned long) task_stack_page(p); 221 int count = 0; 222 223 if (!p || p == current || p->state == TASK_RUNNING)
+6 -6
arch/xtensa/kernel/ptrace.c
··· 72 struct pt_regs *regs; 73 unsigned long tmp; 74 75 - regs = xtensa_pt_regs(child); 76 tmp = 0; /* Default return value. */ 77 78 switch(addr) { ··· 149 case PTRACE_POKEUSR: 150 { 151 struct pt_regs *regs; 152 - regs = xtensa_pt_regs(child); 153 154 switch (addr) { 155 case REG_AR_BASE ... REG_AR_BASE + XCHAL_NUM_AREGS - 1: ··· 240 * elf_gregset_t format. */ 241 242 xtensa_gregset_t format; 243 - struct pt_regs *regs = xtensa_pt_regs(child); 244 245 do_copy_regs (&format, regs, child); 246 ··· 257 * values in the elf_gregset_t format. */ 258 259 xtensa_gregset_t format; 260 - struct pt_regs *regs = xtensa_pt_regs(child); 261 262 if (copy_from_user(&format,(void *)data,sizeof(elf_gregset_t))){ 263 ret = -EFAULT; ··· 281 * elf_fpregset_t format. */ 282 283 elf_fpregset_t fpregs; 284 - struct pt_regs *regs = xtensa_pt_regs(child); 285 286 do_save_fpregs (&fpregs, regs, child); 287 ··· 299 * values in the elf_fpregset_t format. 300 */ 301 elf_fpregset_t fpregs; 302 - struct pt_regs *regs = xtensa_pt_regs(child); 303 304 ret = 0; 305 if (copy_from_user(&fpregs, (void *)data, sizeof(elf_fpregset_t))) {
··· 72 struct pt_regs *regs; 73 unsigned long tmp; 74 75 + regs = task_pt_regs(child); 76 tmp = 0; /* Default return value. */ 77 78 switch(addr) { ··· 149 case PTRACE_POKEUSR: 150 { 151 struct pt_regs *regs; 152 + regs = task_pt_regs(child); 153 154 switch (addr) { 155 case REG_AR_BASE ... REG_AR_BASE + XCHAL_NUM_AREGS - 1: ··· 240 * elf_gregset_t format. */ 241 242 xtensa_gregset_t format; 243 + struct pt_regs *regs = task_pt_regs(child); 244 245 do_copy_regs (&format, regs, child); 246 ··· 257 * values in the elf_gregset_t format. */ 258 259 xtensa_gregset_t format; 260 + struct pt_regs *regs = task_pt_regs(child); 261 262 if (copy_from_user(&format,(void *)data,sizeof(elf_gregset_t))){ 263 ret = -EFAULT; ··· 281 * elf_fpregset_t format. */ 282 283 elf_fpregset_t fpregs; 284 + struct pt_regs *regs = task_pt_regs(child); 285 286 do_save_fpregs (&fpregs, regs, child); 287 ··· 299 * values in the elf_fpregset_t format. 300 */ 301 elf_fpregset_t fpregs; 302 + struct pt_regs *regs = task_pt_regs(child); 303 304 ret = 0; 305 if (copy_from_user(&fpregs, (void *)data, sizeof(elf_fpregset_t))) {
+3 -3
include/asm-xtensa/processor.h
··· 184 #define release_segments(mm) do { } while(0) 185 #define forget_segments() do { } while (0) 186 187 - #define thread_saved_pc(tsk) (xtensa_pt_regs(tsk)->pc) 188 189 extern unsigned long get_wchan(struct task_struct *p); 190 191 - #define KSTK_EIP(tsk) (xtensa_pt_regs(tsk)->pc) 192 - #define KSTK_ESP(tsk) (xtensa_pt_regs(tsk)->areg[1]) 193 194 #define cpu_relax() do { } while (0) 195
··· 184 #define release_segments(mm) do { } while(0) 185 #define forget_segments() do { } while (0) 186 187 + #define thread_saved_pc(tsk) (task_pt_regs(tsk)->pc) 188 189 extern unsigned long get_wchan(struct task_struct *p); 190 191 + #define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc) 192 + #define KSTK_ESP(tsk) (task_pt_regs(tsk)->areg[1]) 193 194 #define cpu_relax() do { } while (0) 195
+2 -2
include/asm-xtensa/ptrace.h
··· 113 }; 114 115 #ifdef __KERNEL__ 116 - # define xtensa_pt_regs(tsk) ((struct pt_regs*) \ 117 - (((long)(tsk)->thread_info + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4)) - 1) 118 # define user_mode(regs) (((regs)->ps & 0x00000020)!=0) 119 # define instruction_pointer(regs) ((regs)->pc) 120 extern void show_regs(struct pt_regs *);
··· 113 }; 114 115 #ifdef __KERNEL__ 116 + # define task_pt_regs(tsk) ((struct pt_regs*) \ 117 + (task_stack_page(tsk) + KERNEL_STACK_SIZE - (XCHAL_NUM_AREGS-16)*4) - 1) 118 # define user_mode(regs) (((regs)->ps & 0x00000020)!=0) 119 # define instruction_pointer(regs) ((regs)->pc) 120 extern void show_regs(struct pt_regs *);