Commit c7584fb6b46a71a1aba5e06dc3cc54ce10f0129e

Authored by Al Viro
Committed by Linus Torvalds
1 parent 579b3ea591

[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>

Showing 7 changed files with 22 additions and 23 deletions Side-by-side Diff

arch/s390/kernel/binfmt_elf32.c
... ... @@ -112,7 +112,7 @@
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);
arch/s390/kernel/process.c
... ... @@ -217,8 +217,7 @@
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;
arch/s390/kernel/ptrace.c
... ... @@ -52,7 +52,7 @@
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,7 +150,7 @@
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,7 +176,7 @@
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,7 +243,7 @@
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,7 +267,7 @@
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 /*
274 274  
275 275  
... ... @@ -393,15 +393,15 @@
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,7 +415,7 @@
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 /*
422 422  
423 423  
... ... @@ -472,15 +472,15 @@
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,7 +494,7 @@
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 /*
arch/s390/kernel/time.c
... ... @@ -282,7 +282,7 @@
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  
arch/s390/kernel/traps.c
... ... @@ -240,7 +240,7 @@
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",
include/asm-s390/elf.h
... ... @@ -163,7 +163,7 @@
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;
include/asm-s390/processor.h
... ... @@ -191,10 +191,10 @@
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.