Lines Matching defs:tsk
87 static void prepare_setup_sigcontext(struct task_struct *tsk)
91 if (tsk->thread.used_vr)
92 flush_altivec_to_thread(tsk);
94 tsk->thread.vrsave = mfspr(SPRN_VRSAVE);
97 flush_fp_to_thread(tsk);
100 if (tsk->thread.used_vsr)
101 flush_vsx_to_thread(tsk);
109 #define unsafe_setup_sigcontext(sc, tsk, signr, set, handler, ctx_has_vsx_region, label)\
111 if (__unsafe_setup_sigcontext(sc, tsk, signr, set, handler, ctx_has_vsx_region))\
115 struct task_struct *tsk, int signr, sigset_t *set,
129 struct pt_regs *regs = tsk->thread.regs;
134 BUG_ON(tsk != current);
140 if (tsk->thread.used_vr) {
142 unsafe_copy_to_user(v_regs, &tsk->thread.vr_state,
152 unsafe_put_user(tsk->thread.vrsave, (u32 __user *)&v_regs[33], efault_out);
157 unsafe_copy_fpr_to_user(&sc->fp_regs, tsk, efault_out);
170 if (tsk->thread.used_vsr && ctx_has_vsx_region) {
172 unsafe_copy_vsx_to_user(v_regs, tsk, efault_out);
208 struct task_struct *tsk,
224 struct pt_regs *regs = tsk->thread.regs;
227 BUG_ON(tsk != current);
237 msr |= tsk->thread.ckpt_regs.msr & (MSR_FP | MSR_VEC | MSR_VSX);
244 if (tsk->thread.used_vr) {
246 err |= __copy_to_user(v_regs, &tsk->thread.ckvr_state,
253 &tsk->thread.vr_state,
257 &tsk->thread.ckvr_state,
269 tsk->thread.ckvrsave = mfspr(SPRN_VRSAVE);
270 err |= __put_user(tsk->thread.ckvrsave, (u32 __user *)&v_regs[33]);
272 err |= __put_user(tsk->thread.vrsave,
275 err |= __put_user(tsk->thread.ckvrsave,
284 err |= copy_ckfpr_to_user(&sc->fp_regs, tsk);
286 err |= copy_fpr_to_user(&tm_sc->fp_regs, tsk);
288 err |= copy_ckfpr_to_user(&tm_sc->fp_regs, tsk);
296 if (tsk->thread.used_vsr) {
300 err |= copy_ckvsx_to_user(v_regs, tsk);
303 err |= copy_vsx_to_user(tm_v_regs, tsk);
305 err |= copy_ckvsx_to_user(tm_v_regs, tsk);
318 &tsk->thread.ckpt_regs, GP_REGS_SIZE);
333 #define unsafe_restore_sigcontext(tsk, set, sig, sc, label) do { \
334 if (__unsafe_restore_sigcontext(tsk, set, sig, sc)) \
337 static long notrace __unsafe_restore_sigcontext(struct task_struct *tsk, sigset_t *set,
345 struct pt_regs *regs = tsk->thread.regs;
350 BUG_ON(tsk != current);
395 unsafe_copy_from_user(&tsk->thread.vr_state, v_regs,
397 tsk->thread.used_vr = true;
398 } else if (tsk->thread.used_vr) {
399 memset(&tsk->thread.vr_state, 0, 33 * sizeof(vector128));
403 unsafe_get_user(tsk->thread.vrsave, (u32 __user *)&v_regs[33], efault_out);
405 tsk->thread.vrsave = 0;
407 mtspr(SPRN_VRSAVE, tsk->thread.vrsave);
410 unsafe_copy_fpr_from_user(tsk, &sc->fp_regs, efault_out);
419 unsafe_copy_vsx_from_user(tsk, v_regs, efault_out);
420 tsk->thread.used_vsr = true;
423 tsk->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = 0;
437 static long restore_tm_sigcontexts(struct task_struct *tsk,
446 struct pt_regs *regs = tsk->thread.regs;
451 BUG_ON(tsk != current);
458 err |= __copy_from_user(&tsk->thread.ckpt_regs, sc->gp_regs,
470 err |= __get_user(tsk->thread.tm_tfhar, &sc->gp_regs[PT_NIP]);
486 err |= __get_user(tsk->thread.ckpt_regs.ctr,
488 err |= __get_user(tsk->thread.ckpt_regs.link,
490 err |= __get_user(tsk->thread.ckpt_regs.xer,
492 err |= __get_user(tsk->thread.ckpt_regs.ccr,
503 * This has to be done before copying stuff into tsk->thread.fpr/vr
519 err |= __copy_from_user(&tsk->thread.ckvr_state, v_regs,
521 err |= __copy_from_user(&tsk->thread.vr_state, tm_v_regs,
525 else if (tsk->thread.used_vr) {
526 memset(&tsk->thread.vr_state, 0, 33 * sizeof(vector128));
527 memset(&tsk->thread.ckvr_state, 0, 33 * sizeof(vector128));
531 err |= __get_user(tsk->thread.ckvrsave,
533 err |= __get_user(tsk->thread.vrsave,
537 tsk->thread.vrsave = 0;
538 tsk->thread.ckvrsave = 0;
541 mtspr(SPRN_VRSAVE, tsk->thread.vrsave);
544 err |= copy_fpr_from_user(tsk, &tm_sc->fp_regs);
545 err |= copy_ckfpr_from_user(tsk, &sc->fp_regs);
555 err |= copy_vsx_from_user(tsk, tm_v_regs);
556 err |= copy_ckvsx_from_user(tsk, v_regs);
557 tsk->thread.used_vsr = true;
560 tsk->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = 0;
561 tsk->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = 0;
567 tsk->thread.tm_texasr |= TEXASR_FS;
597 tm_recheckpoint(&tsk->thread);
601 load_fp_state(&tsk->thread.fp_state);
602 regs_set_return_msr(regs, regs->msr | (MSR_FP | tsk->thread.fpexc_mode));
605 load_vr_state(&tsk->thread.vr_state);
614 static long restore_tm_sigcontexts(struct task_struct *tsk, struct sigcontext __user *sc,
858 struct task_struct *tsk)
863 struct pt_regs *regs = tsk->thread.regs;
867 frame = get_sigframe(ksig, tsk, sizeof(*frame), 0);
874 prepare_setup_sigcontext(tsk);
897 tsk, ksig->sig, NULL,
908 unsafe_setup_sigcontext(&frame->uc.uc_mcontext, tsk, ksig->sig,
921 tsk->thread.fp_state.fpscr = 0;
924 if (tsk->mm->context.vdso) {
925 regs_set_return_ip(regs, VDSO64_SYMBOL(tsk->mm->context.vdso, sigtramp_rt64));