summaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/signal_32.c
diff options
context:
space:
mode:
authorAnton Blanchard <anton@samba.org>2013-09-23 04:04:43 +0200
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>2013-10-11 07:48:32 +0200
commite871c6bbf66c1b44af0fb925427e957301e2e1ff (patch)
tree8f3d994b7ffab062c343c8f2f8010248acda5eb3 /arch/powerpc/kernel/signal_32.c
parentpowerpc: Set MSR_LE bit on little endian builds (diff)
downloadlinux-e871c6bbf66c1b44af0fb925427e957301e2e1ff.tar.xz
linux-e871c6bbf66c1b44af0fb925427e957301e2e1ff.zip
powerpc: Reset MSR_LE on signal entry
We always take signals in big endian which is wrong. Signals should be taken in native endian. Signed-off-by: Anton Blanchard <anton@samba.org> Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Diffstat (limited to 'arch/powerpc/kernel/signal_32.c')
-rw-r--r--arch/powerpc/kernel/signal_32.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c
index bebdf1a1a540..b386b0be8d02 100644
--- a/arch/powerpc/kernel/signal_32.c
+++ b/arch/powerpc/kernel/signal_32.c
@@ -1045,8 +1045,9 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka,
regs->gpr[5] = (unsigned long) &rt_sf->uc;
regs->gpr[6] = (unsigned long) rt_sf;
regs->nip = (unsigned long) ka->sa.sa_handler;
- /* enter the signal handler in big-endian mode */
+ /* enter the signal handler in native-endian mode */
regs->msr &= ~MSR_LE;
+ regs->msr |= (MSR_KERNEL & MSR_LE);
#ifdef CONFIG_PPC_TRANSACTIONAL_MEM
/* Remove TM bits from thread's MSR. The MSR in the sigcontext
* just indicates to userland that we were doing a transaction, but we