Lines Matching full:msr
158 /* copy up to but not including MSR */ in __unsafe_restore_general_regs()
161 /* copy from orig_r3 (the word after the MSR) up to the end */ in __unsafe_restore_general_regs()
271 unsigned long msr = regs->msr; in __unsafe_save_user_regs() local
281 /* set MSR_VEC in the saved MSR value to indicate that in __unsafe_save_user_regs()
283 msr |= MSR_VEC; in __unsafe_save_user_regs()
285 /* else assert((regs->msr & MSR_VEC) == 0) */ in __unsafe_save_user_regs()
299 * Clear the MSR VSX bit to indicate there is no valid state attached in __unsafe_save_user_regs()
302 msr &= ~MSR_VSX; in __unsafe_save_user_regs()
307 * the saved MSR value to indicate that frame->mc_vregs in __unsafe_save_user_regs()
312 msr |= MSR_VSX; in __unsafe_save_user_regs()
320 /* set MSR_SPE in the saved MSR value to indicate that in __unsafe_save_user_regs()
322 msr |= MSR_SPE; in __unsafe_save_user_regs()
324 /* else assert((regs->msr & MSR_SPE) == 0) */ in __unsafe_save_user_regs()
331 unsafe_put_user(msr, &frame->mc_gregs[PT_MSR], failed); in __unsafe_save_user_regs()
333 /* We need to write 0 the MSR top 32 bits in the tm frame so that we in __unsafe_save_user_regs()
370 struct mcontext __user *tm_frame, unsigned long msr) in save_tm_user_regs_unsafe() argument
376 /* Stash the top half of the 64bit MSR into the 32bit MSR word in save_tm_user_regs_unsafe()
378 * MSR in the 'normal' (checkpointed) mcontext and additionally one can in save_tm_user_regs_unsafe()
382 unsafe_put_user((msr >> 32), &tm_frame->mc_gregs[PT_MSR], failed); in save_tm_user_regs_unsafe()
388 if (msr & MSR_VEC) in save_tm_user_regs_unsafe()
397 /* set MSR_VEC in the saved MSR value to indicate that in save_tm_user_regs_unsafe()
400 msr |= MSR_VEC; in save_tm_user_regs_unsafe()
410 if (msr & MSR_VEC) in save_tm_user_regs_unsafe()
418 if (msr & MSR_FP) in save_tm_user_regs_unsafe()
426 * the saved MSR value to indicate that frame->mc_vregs in save_tm_user_regs_unsafe()
431 if (msr & MSR_VSX) in save_tm_user_regs_unsafe()
436 msr |= MSR_VSX; in save_tm_user_regs_unsafe()
439 unsafe_put_user(msr, &frame->mc_gregs[PT_MSR], failed); in save_tm_user_regs_unsafe()
451 struct mcontext __user *tm_frame, unsigned long msr) in save_tm_user_regs_unsafe() argument
457 #define unsafe_save_tm_user_regs(regs, frame, tm_frame, msr, label) do { \ argument
458 if (save_tm_user_regs_unsafe(regs, frame, tm_frame, msr)) \
464 * (except for MSR).
470 unsigned long msr; in restore_user_regs() local
478 * restore general registers but not including MSR or SOFTE. Also in restore_user_regs()
485 unsafe_get_user(msr, &sr->mc_gregs[PT_MSR], failed); in restore_user_regs()
491 regs_set_return_msr(regs, (regs->msr & ~MSR_LE) | (msr & MSR_LE)); in restore_user_regs()
498 regs_set_return_msr(regs, regs->msr & ~MSR_VEC); in restore_user_regs()
499 if (msr & MSR_VEC) { in restore_user_regs()
520 regs_set_return_msr(regs, regs->msr & ~MSR_VSX); in restore_user_regs()
521 if (msr & MSR_VSX) { in restore_user_regs()
536 regs_set_return_msr(regs, regs->msr & ~(MSR_FP | MSR_FE0 | MSR_FE1)); in restore_user_regs()
545 regs_set_return_msr(regs, regs->msr & ~MSR_SPE); in restore_user_regs()
546 if (msr & MSR_SPE) { in restore_user_regs()
569 * MSR, and recheckpoint the original checkpointed register state for processes
576 unsigned long msr, msr_hi; in restore_tm_user_regs() local
582 * restore general registers but not including MSR or SOFTE. Also in restore_tm_user_regs()
593 unsafe_get_user(msr, &sr->mc_gregs[PT_MSR], failed); in restore_tm_user_regs()
596 regs_set_return_msr(regs, (regs->msr & ~MSR_LE) | (msr & MSR_LE)); in restore_tm_user_regs()
598 regs_set_return_msr(regs, regs->msr & ~MSR_VEC); in restore_tm_user_regs()
599 if (msr & MSR_VEC) { in restore_tm_user_regs()
617 regs_set_return_msr(regs, regs->msr & ~(MSR_FP | MSR_FE0 | MSR_FE1)); in restore_tm_user_regs()
621 regs_set_return_msr(regs, regs->msr & ~MSR_VSX); in restore_tm_user_regs()
622 if (msr & MSR_VSX) { in restore_tm_user_regs()
643 if (msr & MSR_VEC) in restore_tm_user_regs()
653 if (msr & MSR_VSX) { in restore_tm_user_regs()
662 /* Get the top half of the MSR from the user context */ in restore_tm_user_regs()
674 * with MSR[TS] set without recheckpointing. in restore_tm_user_regs()
680 * After regs->MSR[TS] being updated, make sure that get_user(), in restore_tm_user_regs()
683 * to be de-scheduled with MSR[TS] set but without calling in restore_tm_user_regs()
686 * Pull in the MSR TM bits from the user context in restore_tm_user_regs()
688 regs_set_return_msr(regs, (regs->msr & ~MSR_TS_MASK) | (msr_hi & MSR_TS_MASK)); in restore_tm_user_regs()
700 msr_check_and_set(msr & (MSR_FP | MSR_VEC)); in restore_tm_user_regs()
701 if (msr & MSR_FP) { in restore_tm_user_regs()
703 regs_set_return_msr(regs, regs->msr | (MSR_FP | current->thread.fpexc_mode)); in restore_tm_user_regs()
705 if (msr & MSR_VEC) { in restore_tm_user_regs()
707 regs_set_return_msr(regs, regs->msr | MSR_VEC); in restore_tm_user_regs()
745 /* Save the thread's msr before get_tm_stackpointer() changes it */ in handle_rt_signal32()
746 unsigned long msr = regs->msr; in handle_rt_signal32() local
754 if (MSR_TM_ACTIVE(msr)) in handle_rt_signal32()
771 if (MSR_TM_ACTIVE(msr)) { in handle_rt_signal32()
778 unsafe_save_tm_user_regs(regs, mctx, tm_mctx, msr, failed); in handle_rt_signal32()
819 regs_set_return_msr(regs, (regs->msr & ~MSR_LE) | (MSR_KERNEL & MSR_LE)); in handle_rt_signal32()
845 /* Save the thread's msr before get_tm_stackpointer() changes it */ in handle_signal32()
846 unsigned long msr = regs->msr; in handle_signal32() local
854 if (MSR_TM_ACTIVE(msr)) in handle_signal32()
876 if (MSR_TM_ACTIVE(msr)) in handle_signal32()
877 unsafe_save_tm_user_regs(regs, mctx, tm_mctx, msr, failed); in handle_signal32()
907 regs_set_return_msr(regs, (regs->msr & ~MSR_LE) | (MSR_KERNEL & MSR_LE)); in handle_signal32()
1025 * If the new context state sets the MSR VSX bits but in COMPAT_SYSCALL_DEFINE3()
1137 /* The top 32 bits of the MSR are stashed in the transactional in COMPAT_SYSCALL_DEFINE0()
1156 * Unset regs->msr because ucontext MSR TS is not in COMPAT_SYSCALL_DEFINE0()
1160 regs_set_return_msr(regs, regs->msr & ~MSR_TS_MASK); in COMPAT_SYSCALL_DEFINE0()
1199 unsigned long new_msr = regs->msr; in SYSCALL_DEFINE3()