Lines Matching refs:tsk

82 static void prepare_setup_sigcontext(struct task_struct *tsk)  in prepare_setup_sigcontext()  argument
86 if (tsk->thread.used_vr) in prepare_setup_sigcontext()
87 flush_altivec_to_thread(tsk); in prepare_setup_sigcontext()
89 tsk->thread.vrsave = mfspr(SPRN_VRSAVE); in prepare_setup_sigcontext()
92 flush_fp_to_thread(tsk); in prepare_setup_sigcontext()
95 if (tsk->thread.used_vsr) in prepare_setup_sigcontext()
96 flush_vsx_to_thread(tsk); in prepare_setup_sigcontext()
104 #define unsafe_setup_sigcontext(sc, tsk, signr, set, handler, ctx_has_vsx_region, label)\ argument
106 if (__unsafe_setup_sigcontext(sc, tsk, signr, set, handler, ctx_has_vsx_region))\
110 struct task_struct *tsk, int signr, sigset_t *set, in __unsafe_setup_sigcontext() argument
124 struct pt_regs *regs = tsk->thread.regs; in __unsafe_setup_sigcontext()
129 BUG_ON(tsk != current); in __unsafe_setup_sigcontext()
135 if (tsk->thread.used_vr) { in __unsafe_setup_sigcontext()
137 unsafe_copy_to_user(v_regs, &tsk->thread.vr_state, in __unsafe_setup_sigcontext()
147 unsafe_put_user(tsk->thread.vrsave, (u32 __user *)&v_regs[33], efault_out); in __unsafe_setup_sigcontext()
152 unsafe_copy_fpr_to_user(&sc->fp_regs, tsk, efault_out); in __unsafe_setup_sigcontext()
165 if (tsk->thread.used_vsr && ctx_has_vsx_region) { in __unsafe_setup_sigcontext()
167 unsafe_copy_vsx_to_user(v_regs, tsk, efault_out); in __unsafe_setup_sigcontext()
203 struct task_struct *tsk, in setup_tm_sigcontexts() argument
219 struct pt_regs *regs = tsk->thread.regs; in setup_tm_sigcontexts()
222 BUG_ON(tsk != current); in setup_tm_sigcontexts()
232 msr |= tsk->thread.ckpt_regs.msr & (MSR_FP | MSR_VEC | MSR_VSX); in setup_tm_sigcontexts()
239 if (tsk->thread.used_vr) { in setup_tm_sigcontexts()
241 err |= __copy_to_user(v_regs, &tsk->thread.ckvr_state, in setup_tm_sigcontexts()
248 &tsk->thread.vr_state, in setup_tm_sigcontexts()
252 &tsk->thread.ckvr_state, in setup_tm_sigcontexts()
264 tsk->thread.ckvrsave = mfspr(SPRN_VRSAVE); in setup_tm_sigcontexts()
265 err |= __put_user(tsk->thread.ckvrsave, (u32 __user *)&v_regs[33]); in setup_tm_sigcontexts()
267 err |= __put_user(tsk->thread.vrsave, in setup_tm_sigcontexts()
270 err |= __put_user(tsk->thread.ckvrsave, in setup_tm_sigcontexts()
279 err |= copy_ckfpr_to_user(&sc->fp_regs, tsk); in setup_tm_sigcontexts()
281 err |= copy_fpr_to_user(&tm_sc->fp_regs, tsk); in setup_tm_sigcontexts()
283 err |= copy_ckfpr_to_user(&tm_sc->fp_regs, tsk); in setup_tm_sigcontexts()
291 if (tsk->thread.used_vsr) { in setup_tm_sigcontexts()
295 err |= copy_ckvsx_to_user(v_regs, tsk); in setup_tm_sigcontexts()
298 err |= copy_vsx_to_user(tm_v_regs, tsk); in setup_tm_sigcontexts()
300 err |= copy_ckvsx_to_user(tm_v_regs, tsk); in setup_tm_sigcontexts()
313 &tsk->thread.ckpt_regs, GP_REGS_SIZE); in setup_tm_sigcontexts()
328 #define unsafe_restore_sigcontext(tsk, set, sig, sc, label) do { \ argument
329 if (__unsafe_restore_sigcontext(tsk, set, sig, sc)) \
332 static long notrace __unsafe_restore_sigcontext(struct task_struct *tsk, sigset_t *set, in __unsafe_restore_sigcontext() argument
340 struct pt_regs *regs = tsk->thread.regs; in __unsafe_restore_sigcontext()
345 BUG_ON(tsk != current); in __unsafe_restore_sigcontext()
387 unsafe_copy_from_user(&tsk->thread.vr_state, v_regs, in __unsafe_restore_sigcontext()
389 tsk->thread.used_vr = true; in __unsafe_restore_sigcontext()
390 } else if (tsk->thread.used_vr) { in __unsafe_restore_sigcontext()
391 memset(&tsk->thread.vr_state, 0, 33 * sizeof(vector128)); in __unsafe_restore_sigcontext()
395 unsafe_get_user(tsk->thread.vrsave, (u32 __user *)&v_regs[33], efault_out); in __unsafe_restore_sigcontext()
397 tsk->thread.vrsave = 0; in __unsafe_restore_sigcontext()
399 mtspr(SPRN_VRSAVE, tsk->thread.vrsave); in __unsafe_restore_sigcontext()
402 unsafe_copy_fpr_from_user(tsk, &sc->fp_regs, efault_out); in __unsafe_restore_sigcontext()
411 unsafe_copy_vsx_from_user(tsk, v_regs, efault_out); in __unsafe_restore_sigcontext()
412 tsk->thread.used_vsr = true; in __unsafe_restore_sigcontext()
415 tsk->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = 0; in __unsafe_restore_sigcontext()
429 static long restore_tm_sigcontexts(struct task_struct *tsk, in restore_tm_sigcontexts() argument
438 struct pt_regs *regs = tsk->thread.regs; in restore_tm_sigcontexts()
443 BUG_ON(tsk != current); in restore_tm_sigcontexts()
450 err |= __copy_from_user(&tsk->thread.ckpt_regs, sc->gp_regs, in restore_tm_sigcontexts()
462 err |= __get_user(tsk->thread.tm_tfhar, &sc->gp_regs[PT_NIP]); in restore_tm_sigcontexts()
478 err |= __get_user(tsk->thread.ckpt_regs.ctr, in restore_tm_sigcontexts()
480 err |= __get_user(tsk->thread.ckpt_regs.link, in restore_tm_sigcontexts()
482 err |= __get_user(tsk->thread.ckpt_regs.xer, in restore_tm_sigcontexts()
484 err |= __get_user(tsk->thread.ckpt_regs.ccr, in restore_tm_sigcontexts()
511 err |= __copy_from_user(&tsk->thread.ckvr_state, v_regs, in restore_tm_sigcontexts()
513 err |= __copy_from_user(&tsk->thread.vr_state, tm_v_regs, in restore_tm_sigcontexts()
517 else if (tsk->thread.used_vr) { in restore_tm_sigcontexts()
518 memset(&tsk->thread.vr_state, 0, 33 * sizeof(vector128)); in restore_tm_sigcontexts()
519 memset(&tsk->thread.ckvr_state, 0, 33 * sizeof(vector128)); in restore_tm_sigcontexts()
523 err |= __get_user(tsk->thread.ckvrsave, in restore_tm_sigcontexts()
525 err |= __get_user(tsk->thread.vrsave, in restore_tm_sigcontexts()
529 tsk->thread.vrsave = 0; in restore_tm_sigcontexts()
530 tsk->thread.ckvrsave = 0; in restore_tm_sigcontexts()
533 mtspr(SPRN_VRSAVE, tsk->thread.vrsave); in restore_tm_sigcontexts()
536 err |= copy_fpr_from_user(tsk, &tm_sc->fp_regs); in restore_tm_sigcontexts()
537 err |= copy_ckfpr_from_user(tsk, &sc->fp_regs); in restore_tm_sigcontexts()
547 err |= copy_vsx_from_user(tsk, tm_v_regs); in restore_tm_sigcontexts()
548 err |= copy_ckvsx_from_user(tsk, v_regs); in restore_tm_sigcontexts()
549 tsk->thread.used_vsr = true; in restore_tm_sigcontexts()
552 tsk->thread.fp_state.fpr[i][TS_VSRLOWOFFSET] = 0; in restore_tm_sigcontexts()
553 tsk->thread.ckfp_state.fpr[i][TS_VSRLOWOFFSET] = 0; in restore_tm_sigcontexts()
559 tsk->thread.tm_texasr |= TEXASR_FS; in restore_tm_sigcontexts()
589 tm_recheckpoint(&tsk->thread); in restore_tm_sigcontexts()
593 load_fp_state(&tsk->thread.fp_state); in restore_tm_sigcontexts()
594 regs_set_return_msr(regs, regs->msr | (MSR_FP | tsk->thread.fpexc_mode)); in restore_tm_sigcontexts()
597 load_vr_state(&tsk->thread.vr_state); in restore_tm_sigcontexts()
606 static long restore_tm_sigcontexts(struct task_struct *tsk, struct sigcontext __user *sc, in restore_tm_sigcontexts() argument
850 struct task_struct *tsk) in handle_rt_signal64() argument
855 struct pt_regs *regs = tsk->thread.regs; in handle_rt_signal64()
859 frame = get_sigframe(ksig, tsk, sizeof(*frame), 0); in handle_rt_signal64()
866 prepare_setup_sigcontext(tsk); in handle_rt_signal64()
889 tsk, ksig->sig, NULL, in handle_rt_signal64()
900 unsafe_setup_sigcontext(&frame->uc.uc_mcontext, tsk, ksig->sig, in handle_rt_signal64()
913 tsk->thread.fp_state.fpscr = 0; in handle_rt_signal64()
916 if (tsk->mm->context.vdso) { in handle_rt_signal64()
917 regs_set_return_ip(regs, VDSO64_SYMBOL(tsk->mm->context.vdso, sigtramp_rt64)); in handle_rt_signal64()