[PATCH] s390: 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 c7584fb6 579b3ea5

+22 -23
+1 -1
arch/s390/kernel/binfmt_elf32.c
··· 112 112 113 113 static inline int dump_task_regs32(struct task_struct *tsk, elf_gregset_t *regs) 114 114 { 115 - struct pt_regs *ptregs = __KSTK_PTREGS(tsk); 115 + struct pt_regs *ptregs = task_pt_regs(tsk); 116 116 int i; 117 117 118 118 memcpy(&regs->psw.mask, &ptregs->psw.mask, 4);
+1 -2
arch/s390/kernel/process.c
··· 217 217 struct pt_regs childregs; 218 218 } *frame; 219 219 220 - frame = ((struct fake_frame *) 221 - (THREAD_SIZE + (unsigned long) p->thread_info)) - 1; 220 + frame = container_of(task_pt_regs(p), struct fake_frame, childregs); 222 221 p->thread.ksp = (unsigned long) frame; 223 222 /* Store access registers to kernel stack of new process. */ 224 223 frame->childregs = *regs;
+13 -13
arch/s390/kernel/ptrace.c
··· 52 52 struct pt_regs *regs; 53 53 per_struct *per_info; 54 54 55 - regs = __KSTK_PTREGS(task); 55 + regs = task_pt_regs(task); 56 56 per_info = (per_struct *) &task->thread.per_info; 57 57 per_info->control_regs.bits.em_instruction_fetch = 58 58 per_info->single_step | per_info->instruction_fetch; ··· 150 150 /* 151 151 * psw and gprs are stored on the stack 152 152 */ 153 - tmp = *(addr_t *)((addr_t) &__KSTK_PTREGS(child)->psw + addr); 153 + tmp = *(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr); 154 154 if (addr == (addr_t) &dummy->regs.psw.mask) 155 155 /* Remove per bit from user psw. */ 156 156 tmp &= ~PSW_MASK_PER; ··· 176 176 /* 177 177 * orig_gpr2 is stored on the kernel stack 178 178 */ 179 - tmp = (addr_t) __KSTK_PTREGS(child)->orig_gpr2; 179 + tmp = (addr_t) task_pt_regs(child)->orig_gpr2; 180 180 181 181 } else if (addr < (addr_t) (&dummy->regs.fp_regs + 1)) { 182 182 /* ··· 243 243 high order bit but older gdb's rely on it */ 244 244 data |= PSW_ADDR_AMODE; 245 245 #endif 246 - *(addr_t *)((addr_t) &__KSTK_PTREGS(child)->psw + addr) = data; 246 + *(addr_t *)((addr_t) &task_pt_regs(child)->psw + addr) = data; 247 247 248 248 } else if (addr < (addr_t) (&dummy->regs.orig_gpr2)) { 249 249 /* ··· 267 267 /* 268 268 * orig_gpr2 is stored on the kernel stack 269 269 */ 270 - __KSTK_PTREGS(child)->orig_gpr2 = data; 270 + task_pt_regs(child)->orig_gpr2 = data; 271 271 272 272 } else if (addr < (addr_t) (&dummy->regs.fp_regs + 1)) { 273 273 /* ··· 393 393 */ 394 394 if (addr == (addr_t) &dummy32->regs.psw.mask) { 395 395 /* Fake a 31 bit psw mask. */ 396 - tmp = (__u32)(__KSTK_PTREGS(child)->psw.mask >> 32); 396 + tmp = (__u32)(task_pt_regs(child)->psw.mask >> 32); 397 397 tmp = PSW32_MASK_MERGE(PSW32_USER_BITS, tmp); 398 398 } else if (addr == (addr_t) &dummy32->regs.psw.addr) { 399 399 /* Fake a 31 bit psw address. */ 400 - tmp = (__u32) __KSTK_PTREGS(child)->psw.addr | 400 + tmp = (__u32) task_pt_regs(child)->psw.addr | 401 401 PSW32_ADDR_AMODE31; 402 402 } else { 403 403 /* gpr 0-15 */ 404 - tmp = *(__u32 *)((addr_t) &__KSTK_PTREGS(child)->psw + 404 + tmp = *(__u32 *)((addr_t) &task_pt_regs(child)->psw + 405 405 addr*2 + 4); 406 406 } 407 407 } else if (addr < (addr_t) (&dummy32->regs.orig_gpr2)) { ··· 415 415 /* 416 416 * orig_gpr2 is stored on the kernel stack 417 417 */ 418 - tmp = *(__u32*)((addr_t) &__KSTK_PTREGS(child)->orig_gpr2 + 4); 418 + tmp = *(__u32*)((addr_t) &task_pt_regs(child)->orig_gpr2 + 4); 419 419 420 420 } else if (addr < (addr_t) (&dummy32->regs.fp_regs + 1)) { 421 421 /* ··· 472 472 if (tmp != PSW32_MASK_MERGE(PSW32_USER_BITS, tmp)) 473 473 /* Invalid psw mask. */ 474 474 return -EINVAL; 475 - __KSTK_PTREGS(child)->psw.mask = 475 + task_pt_regs(child)->psw.mask = 476 476 PSW_MASK_MERGE(PSW_USER32_BITS, (__u64) tmp << 32); 477 477 } else if (addr == (addr_t) &dummy32->regs.psw.addr) { 478 478 /* Build a 64 bit psw address from 31 bit address. */ 479 - __KSTK_PTREGS(child)->psw.addr = 479 + task_pt_regs(child)->psw.addr = 480 480 (__u64) tmp & PSW32_ADDR_INSN; 481 481 } else { 482 482 /* gpr 0-15 */ 483 - *(__u32*)((addr_t) &__KSTK_PTREGS(child)->psw 483 + *(__u32*)((addr_t) &task_pt_regs(child)->psw 484 484 + addr*2 + 4) = tmp; 485 485 } 486 486 } else if (addr < (addr_t) (&dummy32->regs.orig_gpr2)) { ··· 494 494 /* 495 495 * orig_gpr2 is stored on the kernel stack 496 496 */ 497 - *(__u32*)((addr_t) &__KSTK_PTREGS(child)->orig_gpr2 + 4) = tmp; 497 + *(__u32*)((addr_t) &task_pt_regs(child)->orig_gpr2 + 4) = tmp; 498 498 499 499 } else if (addr < (addr_t) (&dummy32->regs.fp_regs + 1)) { 500 500 /*
+1 -1
arch/s390/kernel/time.c
··· 282 282 { 283 283 if (!cpu_isset(smp_processor_id(), nohz_cpu_mask)) 284 284 return; 285 - account_ticks(__KSTK_PTREGS(current)); 285 + account_ticks(task_pt_regs(current)); 286 286 cpu_clear(smp_processor_id(), nohz_cpu_mask); 287 287 } 288 288
+1 -1
arch/s390/kernel/traps.c
··· 240 240 { 241 241 struct pt_regs *regs; 242 242 243 - regs = __KSTK_PTREGS(task); 243 + regs = task_pt_regs(task); 244 244 buffer += sprintf(buffer, "task: %p, ksp: %p\n", 245 245 task, (void *)task->thread.ksp); 246 246 buffer += sprintf(buffer, "User PSW : %p %p\n",
+1 -1
include/asm-s390/elf.h
··· 163 163 164 164 static inline int dump_task_regs(struct task_struct *tsk, elf_gregset_t *regs) 165 165 { 166 - struct pt_regs *ptregs = __KSTK_PTREGS(tsk); 166 + struct pt_regs *ptregs = task_pt_regs(tsk); 167 167 memcpy(&regs->psw, &ptregs->psw, sizeof(regs->psw)+sizeof(regs->gprs)); 168 168 memcpy(regs->acrs, tsk->thread.acrs, sizeof(regs->acrs)); 169 169 regs->orig_gpr2 = ptregs->orig_gpr2;
+4 -4
include/asm-s390/processor.h
··· 191 191 extern void show_trace(struct task_struct *task, unsigned long *sp); 192 192 193 193 unsigned long get_wchan(struct task_struct *p); 194 - #define __KSTK_PTREGS(tsk) ((struct pt_regs *) \ 195 - ((unsigned long) tsk->thread_info + THREAD_SIZE - sizeof(struct pt_regs))) 196 - #define KSTK_EIP(tsk) (__KSTK_PTREGS(tsk)->psw.addr) 197 - #define KSTK_ESP(tsk) (__KSTK_PTREGS(tsk)->gprs[15]) 194 + #define task_pt_regs(tsk) ((struct pt_regs *) \ 195 + ((void *)(tsk)->thread_info + THREAD_SIZE) - 1) 196 + #define KSTK_EIP(tsk) (task_pt_regs(tsk)->psw.addr) 197 + #define KSTK_ESP(tsk) (task_pt_regs(tsk)->gprs[15]) 198 198 199 199 /* 200 200 * Give up the time slice of the virtual PU.