powerpc/32: enter syscall with MSR_EE inconditionaly set
authorChristophe Leroy <christophe.leroy@c-s.fr>
Tue, 30 Apr 2019 12:38:58 +0000 (12:38 +0000)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 2 May 2019 15:20:27 +0000 (01:20 +1000)
syscalls are expected to be entered with MSR_EE set. Lets
make it inconditional by forcing MSR_EE on syscalls.

This patch adds EXC_XFER_SYS for that.

Suggested-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
[splited out from benh RFC patch]

Signed-off-by: Christophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/kernel/head_32.S
arch/powerpc/kernel/head_32.h
arch/powerpc/kernel/head_40x.S
arch/powerpc/kernel/head_44x.S
arch/powerpc/kernel/head_8xx.S
arch/powerpc/kernel/head_booke.h
arch/powerpc/kernel/head_fsl_booke.S

index f98e6b4..c5fd76d 100644 (file)
@@ -375,7 +375,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_FPU_UNAVAILABLE)
        DO_KVM  0xc00
 SystemCall:
        EXCEPTION_PROLOG
-       EXC_XFER_EE_LITE(0xc00, DoSyscall)
+       EXC_XFER_SYS(0xc00, DoSyscall)
 
 /* Single step - not used on 601 */
        EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD)
index aa0131b..7221418 100644 (file)
@@ -123,6 +123,10 @@ label:
        EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \
                          ret_from_except)
 
+#define EXC_XFER_SYS(n, hdlr)          \
+       EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL | MSR_EE, NOCOPY, transfer_to_handler, \
+                         ret_from_except)
+
 #define EXC_XFER_EE(n, hdlr)           \
        EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, COPY_EE, transfer_to_handler_full, \
                          ret_from_except_full)
index b3a2e55..3e1b8a8 100644 (file)
@@ -350,7 +350,7 @@ _ENTRY(saved_ksp_limit)
 /* 0x0C00 - System Call Exception */
        START_EXCEPTION(0x0C00, SystemCall)
        EXCEPTION_PROLOG
-       EXC_XFER_EE_LITE(0xc00, DoSyscall)
+       EXC_XFER_SYS(0xc00, DoSyscall)
 
        EXCEPTION(0x0D00, Trap_0D, unknown_exception, EXC_XFER_EE)
        EXCEPTION(0x0E00, Trap_0E, unknown_exception, EXC_XFER_EE)
index 34a5df8..1926871 100644 (file)
@@ -286,7 +286,7 @@ interrupt_base:
        /* System Call Interrupt */
        START_EXCEPTION(SystemCall)
        NORMAL_EXCEPTION_PROLOG(BOOKE_INTERRUPT_SYSCALL)
-       EXC_XFER_EE_LITE(0x0c00, DoSyscall)
+       EXC_XFER_SYS(0x0c00, DoSyscall)
 
        /* Auxiliary Processor Unavailable Interrupt */
        EXCEPTION(0x2020, BOOKE_INTERRUPT_AP_UNAVAIL, \
index 14c3eb3..aa8e629 100644 (file)
@@ -186,7 +186,7 @@ Alignment:
        . = 0xc00
 SystemCall:
        EXCEPTION_PROLOG
-       EXC_XFER_EE_LITE(0xc00, DoSyscall)
+       EXC_XFER_SYS(0xc00, DoSyscall)
 
 /* Single step - not used on 601 */
        EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD)
index 1b22a8d..612f54b 100644 (file)
@@ -251,6 +251,10 @@ label:
        EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \
                          ret_from_except)
 
+#define EXC_XFER_SYS(n, hdlr)                                          \
+       EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL | MSR_EE, NOCOPY, transfer_to_handler, \
+                         ret_from_except)
+
 #define EXC_XFER_EE(n, hdlr)           \
        EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, COPY_EE, transfer_to_handler_full, \
                          ret_from_except_full)
index 567e0ed..a7bebb9 100644 (file)
@@ -414,7 +414,7 @@ interrupt_base:
        /* System Call Interrupt */
        START_EXCEPTION(SystemCall)
        NORMAL_EXCEPTION_PROLOG(SYSCALL)
-       EXC_XFER_EE_LITE(0x0c00, DoSyscall)
+       EXC_XFER_SYS(0x0c00, DoSyscall)
 
        /* Auxiliary Processor Unavailable Interrupt */
        EXCEPTION(0x2900, AP_UNAVAIL, AuxillaryProcessorUnavailable, \