Commit c7584fb6b46a71a1aba5e06dc3cc54ce10f0129e
Committed by
Linus Torvalds
1 parent
579b3ea591
Exists in
master
and in
20 other branches
[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(®s->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
arch/s390/kernel/traps.c
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(®s->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. |