Lines Matching refs:regs
93 static long setup_sigcontext(struct sigcontext __user *sc, struct pt_regs *regs, in setup_sigcontext() argument
108 unsigned long msr = regs->msr; in setup_sigcontext()
159 err |= __put_user(&sc->gp_regs, &sc->regs); in setup_sigcontext()
160 WARN_ON(!FULL_REGS(regs)); in setup_sigcontext()
161 err |= __copy_to_user(&sc->gp_regs, regs, GP_REGS_SIZE); in setup_sigcontext()
185 struct pt_regs *regs, in setup_tm_sigcontexts() argument
200 unsigned long msr = regs->msr; in setup_tm_sigcontexts()
203 BUG_ON(!MSR_TM_ACTIVE(regs->msr)); in setup_tm_sigcontexts()
210 regs->msr &= ~MSR_TS_MASK; in setup_tm_sigcontexts()
291 err |= __put_user(&sc->gp_regs, &sc->regs); in setup_tm_sigcontexts()
292 err |= __put_user(&tm_sc->gp_regs, &tm_sc->regs); in setup_tm_sigcontexts()
293 WARN_ON(!FULL_REGS(regs)); in setup_tm_sigcontexts()
294 err |= __copy_to_user(&tm_sc->gp_regs, regs, GP_REGS_SIZE); in setup_tm_sigcontexts()
312 static long restore_sigcontext(struct pt_regs *regs, sigset_t *set, int sig, in restore_sigcontext() argument
327 save_r13 = regs->gpr[13]; in restore_sigcontext()
330 err |= __copy_from_user(regs->gpr, sc->gp_regs, sizeof(regs->gpr)); in restore_sigcontext()
331 err |= __get_user(regs->nip, &sc->gp_regs[PT_NIP]); in restore_sigcontext()
335 regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE); in restore_sigcontext()
336 err |= __get_user(regs->orig_gpr3, &sc->gp_regs[PT_ORIG_R3]); in restore_sigcontext()
337 err |= __get_user(regs->ctr, &sc->gp_regs[PT_CTR]); in restore_sigcontext()
338 err |= __get_user(regs->link, &sc->gp_regs[PT_LNK]); in restore_sigcontext()
339 err |= __get_user(regs->xer, &sc->gp_regs[PT_XER]); in restore_sigcontext()
340 err |= __get_user(regs->ccr, &sc->gp_regs[PT_CCR]); in restore_sigcontext()
342 regs->trap = 0; in restore_sigcontext()
343 err |= __get_user(regs->dar, &sc->gp_regs[PT_DAR]); in restore_sigcontext()
344 err |= __get_user(regs->dsisr, &sc->gp_regs[PT_DSISR]); in restore_sigcontext()
345 err |= __get_user(regs->result, &sc->gp_regs[PT_RESULT]); in restore_sigcontext()
348 regs->gpr[13] = save_r13; in restore_sigcontext()
366 regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC | MSR_VSX); in restore_sigcontext()
411 static long restore_tm_sigcontexts(struct pt_regs *regs, in restore_tm_sigcontexts() argument
424 err |= __copy_from_user(regs->gpr, tm_sc->gp_regs, sizeof(regs->gpr)); in restore_tm_sigcontexts()
426 sizeof(regs->gpr)); in restore_tm_sigcontexts()
436 err |= __get_user(regs->nip, &tm_sc->gp_regs[PT_NIP]); in restore_tm_sigcontexts()
446 regs->msr = (regs->msr & ~MSR_TS_MASK) | (msr & MSR_TS_MASK); in restore_tm_sigcontexts()
449 regs->msr = (regs->msr & ~MSR_LE) | (msr & MSR_LE); in restore_tm_sigcontexts()
452 err |= __get_user(regs->ctr, &tm_sc->gp_regs[PT_CTR]); in restore_tm_sigcontexts()
453 err |= __get_user(regs->link, &tm_sc->gp_regs[PT_LNK]); in restore_tm_sigcontexts()
454 err |= __get_user(regs->xer, &tm_sc->gp_regs[PT_XER]); in restore_tm_sigcontexts()
455 err |= __get_user(regs->ccr, &tm_sc->gp_regs[PT_CCR]); in restore_tm_sigcontexts()
466 err |= __get_user(regs->trap, &sc->gp_regs[PT_TRAP]); in restore_tm_sigcontexts()
467 err |= __get_user(regs->dar, &sc->gp_regs[PT_DAR]); in restore_tm_sigcontexts()
468 err |= __get_user(regs->dsisr, &sc->gp_regs[PT_DSISR]); in restore_tm_sigcontexts()
469 err |= __get_user(regs->result, &sc->gp_regs[PT_RESULT]); in restore_tm_sigcontexts()
485 regs->msr &= ~(MSR_FP | MSR_FE0 | MSR_FE1 | MSR_VEC | MSR_VSX); in restore_tm_sigcontexts()
552 regs->msr |= (MSR_FP | current->thread.fpexc_mode); in restore_tm_sigcontexts()
557 regs->msr |= MSR_VEC; in restore_tm_sigcontexts()
603 long ctx_size, long r6, long r7, long r8, struct pt_regs *regs) in sys_swapcontext() argument
632 || setup_sigcontext(&old_ctx->uc_mcontext, regs, 0, NULL, 0, in sys_swapcontext()
660 if (restore_sigcontext(regs, NULL, 0, &new_ctx->uc_mcontext)) in sys_swapcontext()
675 struct pt_regs *regs) in sys_rt_sigreturn() argument
677 struct ucontext __user *uc = (struct ucontext __user *)regs->gpr[1]; in sys_rt_sigreturn()
700 if (restore_tm_sigcontexts(regs, &uc->uc_mcontext, in sys_rt_sigreturn()
707 if (restore_sigcontext(regs, NULL, 1, &uc->uc_mcontext)) in sys_rt_sigreturn()
718 printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32, in sys_rt_sigreturn()
720 (long)uc, regs->nip, regs->link); in sys_rt_sigreturn()
726 int handle_rt_signal64(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) in handle_rt_signal64() argument
732 frame = get_sigframe(ksig, get_tm_stackpointer(regs), sizeof(*frame), 0); in handle_rt_signal64()
744 err |= __save_altstack(&frame->uc.uc_stack, regs->gpr[1]); in handle_rt_signal64()
746 if (MSR_TM_ACTIVE(regs->msr)) { in handle_rt_signal64()
753 regs, ksig->sig, in handle_rt_signal64()
760 err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, ksig->sig, in handle_rt_signal64()
773 regs->link = current->mm->context.vdso_base + vdso64_rt_sigtramp; in handle_rt_signal64()
778 regs->link = (unsigned long) &frame->tramp[0]; in handle_rt_signal64()
783 err |= put_user(regs->gpr[1], (unsigned long __user *)newsp); in handle_rt_signal64()
787 regs->nip = (unsigned long) ksig->ka.sa.sa_handler; in handle_rt_signal64()
788 regs->gpr[12] = regs->nip; in handle_rt_signal64()
798 err |= get_user(regs->nip, &funct_desc_ptr->entry); in handle_rt_signal64()
799 err |= get_user(regs->gpr[2], &funct_desc_ptr->toc); in handle_rt_signal64()
803 regs->msr &= ~MSR_LE; in handle_rt_signal64()
804 regs->msr |= (MSR_KERNEL & MSR_LE); in handle_rt_signal64()
805 regs->gpr[1] = newsp; in handle_rt_signal64()
806 regs->gpr[3] = ksig->sig; in handle_rt_signal64()
807 regs->result = 0; in handle_rt_signal64()
809 err |= get_user(regs->gpr[4], (unsigned long __user *)&frame->pinfo); in handle_rt_signal64()
810 err |= get_user(regs->gpr[5], (unsigned long __user *)&frame->puc); in handle_rt_signal64()
811 regs->gpr[6] = (unsigned long) frame; in handle_rt_signal64()
813 regs->gpr[4] = (unsigned long)&frame->uc.uc_mcontext; in handle_rt_signal64()
822 printk_ratelimited(regs->msr & MSR_64BIT ? fmt64 : fmt32, in handle_rt_signal64()
824 (long)frame, regs->nip, regs->link); in handle_rt_signal64()