diff options
Diffstat (limited to 'arch/powerpc/kernel/signal_32.c')
-rw-r--r-- | arch/powerpc/kernel/signal_32.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index 68027bfa5f8e..6ce69e6f1fcb 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c | |||
@@ -519,6 +519,13 @@ static int save_tm_user_regs(struct pt_regs *regs, | |||
519 | { | 519 | { |
520 | unsigned long msr = regs->msr; | 520 | unsigned long msr = regs->msr; |
521 | 521 | ||
522 | /* Remove TM bits from thread's MSR. The MSR in the sigcontext | ||
523 | * just indicates to userland that we were doing a transaction, but we | ||
524 | * don't want to return in transactional state. This also ensures | ||
525 | * that flush_fp_to_thread won't set TIF_RESTORE_TM again. | ||
526 | */ | ||
527 | regs->msr &= ~MSR_TS_MASK; | ||
528 | |||
522 | /* Make sure floating point registers are stored in regs */ | 529 | /* Make sure floating point registers are stored in regs */ |
523 | flush_fp_to_thread(current); | 530 | flush_fp_to_thread(current); |
524 | 531 | ||
@@ -1056,13 +1063,6 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, | |||
1056 | /* enter the signal handler in native-endian mode */ | 1063 | /* enter the signal handler in native-endian mode */ |
1057 | regs->msr &= ~MSR_LE; | 1064 | regs->msr &= ~MSR_LE; |
1058 | regs->msr |= (MSR_KERNEL & MSR_LE); | 1065 | regs->msr |= (MSR_KERNEL & MSR_LE); |
1059 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
1060 | /* Remove TM bits from thread's MSR. The MSR in the sigcontext | ||
1061 | * just indicates to userland that we were doing a transaction, but we | ||
1062 | * don't want to return in transactional state: | ||
1063 | */ | ||
1064 | regs->msr &= ~MSR_TS_MASK; | ||
1065 | #endif | ||
1066 | return 1; | 1066 | return 1; |
1067 | 1067 | ||
1068 | badframe: | 1068 | badframe: |
@@ -1484,13 +1484,6 @@ int handle_signal32(unsigned long sig, struct k_sigaction *ka, | |||
1484 | regs->nip = (unsigned long) ka->sa.sa_handler; | 1484 | regs->nip = (unsigned long) ka->sa.sa_handler; |
1485 | /* enter the signal handler in big-endian mode */ | 1485 | /* enter the signal handler in big-endian mode */ |
1486 | regs->msr &= ~MSR_LE; | 1486 | regs->msr &= ~MSR_LE; |
1487 | #ifdef CONFIG_PPC_TRANSACTIONAL_MEM | ||
1488 | /* Remove TM bits from thread's MSR. The MSR in the sigcontext | ||
1489 | * just indicates to userland that we were doing a transaction, but we | ||
1490 | * don't want to return in transactional state: | ||
1491 | */ | ||
1492 | regs->msr &= ~MSR_TS_MASK; | ||
1493 | #endif | ||
1494 | return 1; | 1487 | return 1; |
1495 | 1488 | ||
1496 | badframe: | 1489 | badframe: |