summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristophe Leroy <christophe.leroy@c-s.fr>2019-04-30 08:38:58 -0400
committerMichael Ellerman <mpe@ellerman.id.au>2019-05-02 11:20:27 -0400
commitf97dec21a306967edbc49ce46f3ecefa3cd16907 (patch)
tree71926e433d43add06480dcdd7acbd4f1e4bc6473
parentef4291243f51d0a69899ee2025de09578c0fcba8 (diff)
powerpc/32: enter syscall with MSR_EE inconditionaly set
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>
-rw-r--r--arch/powerpc/kernel/head_32.S2
-rw-r--r--arch/powerpc/kernel/head_32.h4
-rw-r--r--arch/powerpc/kernel/head_40x.S2
-rw-r--r--arch/powerpc/kernel/head_44x.S2
-rw-r--r--arch/powerpc/kernel/head_8xx.S2
-rw-r--r--arch/powerpc/kernel/head_booke.h4
-rw-r--r--arch/powerpc/kernel/head_fsl_booke.S2
7 files changed, 13 insertions, 5 deletions
diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S
index f98e6b461238..c5fd76d0caf6 100644
--- a/arch/powerpc/kernel/head_32.S
+++ b/arch/powerpc/kernel/head_32.S
@@ -375,7 +375,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_FPU_UNAVAILABLE)
375 DO_KVM 0xc00 375 DO_KVM 0xc00
376SystemCall: 376SystemCall:
377 EXCEPTION_PROLOG 377 EXCEPTION_PROLOG
378 EXC_XFER_EE_LITE(0xc00, DoSyscall) 378 EXC_XFER_SYS(0xc00, DoSyscall)
379 379
380/* Single step - not used on 601 */ 380/* Single step - not used on 601 */
381 EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD) 381 EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD)
diff --git a/arch/powerpc/kernel/head_32.h b/arch/powerpc/kernel/head_32.h
index aa0131bb09b5..7221418a883f 100644
--- a/arch/powerpc/kernel/head_32.h
+++ b/arch/powerpc/kernel/head_32.h
@@ -123,6 +123,10 @@ label:
123 EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \ 123 EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \
124 ret_from_except) 124 ret_from_except)
125 125
126#define EXC_XFER_SYS(n, hdlr) \
127 EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL | MSR_EE, NOCOPY, transfer_to_handler, \
128 ret_from_except)
129
126#define EXC_XFER_EE(n, hdlr) \ 130#define EXC_XFER_EE(n, hdlr) \
127 EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, COPY_EE, transfer_to_handler_full, \ 131 EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, COPY_EE, transfer_to_handler_full, \
128 ret_from_except_full) 132 ret_from_except_full)
diff --git a/arch/powerpc/kernel/head_40x.S b/arch/powerpc/kernel/head_40x.S
index b3a2e55e1c15..3e1b8a85cc0d 100644
--- a/arch/powerpc/kernel/head_40x.S
+++ b/arch/powerpc/kernel/head_40x.S
@@ -350,7 +350,7 @@ _ENTRY(saved_ksp_limit)
350/* 0x0C00 - System Call Exception */ 350/* 0x0C00 - System Call Exception */
351 START_EXCEPTION(0x0C00, SystemCall) 351 START_EXCEPTION(0x0C00, SystemCall)
352 EXCEPTION_PROLOG 352 EXCEPTION_PROLOG
353 EXC_XFER_EE_LITE(0xc00, DoSyscall) 353 EXC_XFER_SYS(0xc00, DoSyscall)
354 354
355 EXCEPTION(0x0D00, Trap_0D, unknown_exception, EXC_XFER_EE) 355 EXCEPTION(0x0D00, Trap_0D, unknown_exception, EXC_XFER_EE)
356 EXCEPTION(0x0E00, Trap_0E, unknown_exception, EXC_XFER_EE) 356 EXCEPTION(0x0E00, Trap_0E, unknown_exception, EXC_XFER_EE)
diff --git a/arch/powerpc/kernel/head_44x.S b/arch/powerpc/kernel/head_44x.S
index 34a5df827b38..19268713b692 100644
--- a/arch/powerpc/kernel/head_44x.S
+++ b/arch/powerpc/kernel/head_44x.S
@@ -286,7 +286,7 @@ interrupt_base:
286 /* System Call Interrupt */ 286 /* System Call Interrupt */
287 START_EXCEPTION(SystemCall) 287 START_EXCEPTION(SystemCall)
288 NORMAL_EXCEPTION_PROLOG(BOOKE_INTERRUPT_SYSCALL) 288 NORMAL_EXCEPTION_PROLOG(BOOKE_INTERRUPT_SYSCALL)
289 EXC_XFER_EE_LITE(0x0c00, DoSyscall) 289 EXC_XFER_SYS(0x0c00, DoSyscall)
290 290
291 /* Auxiliary Processor Unavailable Interrupt */ 291 /* Auxiliary Processor Unavailable Interrupt */
292 EXCEPTION(0x2020, BOOKE_INTERRUPT_AP_UNAVAIL, \ 292 EXCEPTION(0x2020, BOOKE_INTERRUPT_AP_UNAVAIL, \
diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S
index 14c3eb3267b8..aa8e629f7725 100644
--- a/arch/powerpc/kernel/head_8xx.S
+++ b/arch/powerpc/kernel/head_8xx.S
@@ -186,7 +186,7 @@ Alignment:
186 . = 0xc00 186 . = 0xc00
187SystemCall: 187SystemCall:
188 EXCEPTION_PROLOG 188 EXCEPTION_PROLOG
189 EXC_XFER_EE_LITE(0xc00, DoSyscall) 189 EXC_XFER_SYS(0xc00, DoSyscall)
190 190
191/* Single step - not used on 601 */ 191/* Single step - not used on 601 */
192 EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD) 192 EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD)
diff --git a/arch/powerpc/kernel/head_booke.h b/arch/powerpc/kernel/head_booke.h
index 1b22a8dea399..612f54ba1125 100644
--- a/arch/powerpc/kernel/head_booke.h
+++ b/arch/powerpc/kernel/head_booke.h
@@ -251,6 +251,10 @@ label:
251 EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \ 251 EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \
252 ret_from_except) 252 ret_from_except)
253 253
254#define EXC_XFER_SYS(n, hdlr) \
255 EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL | MSR_EE, NOCOPY, transfer_to_handler, \
256 ret_from_except)
257
254#define EXC_XFER_EE(n, hdlr) \ 258#define EXC_XFER_EE(n, hdlr) \
255 EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, COPY_EE, transfer_to_handler_full, \ 259 EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, COPY_EE, transfer_to_handler_full, \
256 ret_from_except_full) 260 ret_from_except_full)
diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S
index 567e0ed45ca8..a7bebb996393 100644
--- a/arch/powerpc/kernel/head_fsl_booke.S
+++ b/arch/powerpc/kernel/head_fsl_booke.S
@@ -414,7 +414,7 @@ interrupt_base:
414 /* System Call Interrupt */ 414 /* System Call Interrupt */
415 START_EXCEPTION(SystemCall) 415 START_EXCEPTION(SystemCall)
416 NORMAL_EXCEPTION_PROLOG(SYSCALL) 416 NORMAL_EXCEPTION_PROLOG(SYSCALL)
417 EXC_XFER_EE_LITE(0x0c00, DoSyscall) 417 EXC_XFER_SYS(0x0c00, DoSyscall)
418 418
419 /* Auxiliary Processor Unavailable Interrupt */ 419 /* Auxiliary Processor Unavailable Interrupt */
420 EXCEPTION(0x2900, AP_UNAVAIL, AuxillaryProcessorUnavailable, \ 420 EXCEPTION(0x2900, AP_UNAVAIL, AuxillaryProcessorUnavailable, \