Commit f97dec21 authored by Christophe Leroy's avatar Christophe Leroy Committed by Michael Ellerman

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: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
[splited out from benh RFC patch]
Signed-off-by: default avatarChristophe Leroy <christophe.leroy@c-s.fr>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent ef429124
...@@ -375,7 +375,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_FPU_UNAVAILABLE) ...@@ -375,7 +375,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_FPU_UNAVAILABLE)
DO_KVM 0xc00 DO_KVM 0xc00
SystemCall: SystemCall:
EXCEPTION_PROLOG EXCEPTION_PROLOG
EXC_XFER_EE_LITE(0xc00, DoSyscall) EXC_XFER_SYS(0xc00, DoSyscall)
/* Single step - not used on 601 */ /* Single step - not used on 601 */
EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD) EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD)
......
...@@ -123,6 +123,10 @@ ...@@ -123,6 +123,10 @@
EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \ EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \
ret_from_except) 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) \ #define EXC_XFER_EE(n, hdlr) \
EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, COPY_EE, transfer_to_handler_full, \ EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, COPY_EE, transfer_to_handler_full, \
ret_from_except_full) ret_from_except_full)
......
...@@ -350,7 +350,7 @@ _ENTRY(saved_ksp_limit) ...@@ -350,7 +350,7 @@ _ENTRY(saved_ksp_limit)
/* 0x0C00 - System Call Exception */ /* 0x0C00 - System Call Exception */
START_EXCEPTION(0x0C00, SystemCall) START_EXCEPTION(0x0C00, SystemCall)
EXCEPTION_PROLOG EXCEPTION_PROLOG
EXC_XFER_EE_LITE(0xc00, DoSyscall) EXC_XFER_SYS(0xc00, DoSyscall)
EXCEPTION(0x0D00, Trap_0D, unknown_exception, EXC_XFER_EE) EXCEPTION(0x0D00, Trap_0D, unknown_exception, EXC_XFER_EE)
EXCEPTION(0x0E00, Trap_0E, unknown_exception, EXC_XFER_EE) EXCEPTION(0x0E00, Trap_0E, unknown_exception, EXC_XFER_EE)
......
...@@ -286,7 +286,7 @@ interrupt_base: ...@@ -286,7 +286,7 @@ interrupt_base:
/* System Call Interrupt */ /* System Call Interrupt */
START_EXCEPTION(SystemCall) START_EXCEPTION(SystemCall)
NORMAL_EXCEPTION_PROLOG(BOOKE_INTERRUPT_SYSCALL) NORMAL_EXCEPTION_PROLOG(BOOKE_INTERRUPT_SYSCALL)
EXC_XFER_EE_LITE(0x0c00, DoSyscall) EXC_XFER_SYS(0x0c00, DoSyscall)
/* Auxiliary Processor Unavailable Interrupt */ /* Auxiliary Processor Unavailable Interrupt */
EXCEPTION(0x2020, BOOKE_INTERRUPT_AP_UNAVAIL, \ EXCEPTION(0x2020, BOOKE_INTERRUPT_AP_UNAVAIL, \
......
...@@ -186,7 +186,7 @@ Alignment: ...@@ -186,7 +186,7 @@ Alignment:
. = 0xc00 . = 0xc00
SystemCall: SystemCall:
EXCEPTION_PROLOG EXCEPTION_PROLOG
EXC_XFER_EE_LITE(0xc00, DoSyscall) EXC_XFER_SYS(0xc00, DoSyscall)
/* Single step - not used on 601 */ /* Single step - not used on 601 */
EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD) EXCEPTION(0xd00, SingleStep, single_step_exception, EXC_XFER_STD)
......
...@@ -251,6 +251,10 @@ END_BTB_FLUSH_SECTION ...@@ -251,6 +251,10 @@ END_BTB_FLUSH_SECTION
EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \ EXC_XFER_TEMPLATE(hdlr, n+1, MSR_KERNEL, NOCOPY, transfer_to_handler, \
ret_from_except) 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) \ #define EXC_XFER_EE(n, hdlr) \
EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, COPY_EE, transfer_to_handler_full, \ EXC_XFER_TEMPLATE(hdlr, n, MSR_KERNEL, COPY_EE, transfer_to_handler_full, \
ret_from_except_full) ret_from_except_full)
......
...@@ -414,7 +414,7 @@ interrupt_base: ...@@ -414,7 +414,7 @@ interrupt_base:
/* System Call Interrupt */ /* System Call Interrupt */
START_EXCEPTION(SystemCall) START_EXCEPTION(SystemCall)
NORMAL_EXCEPTION_PROLOG(SYSCALL) NORMAL_EXCEPTION_PROLOG(SYSCALL)
EXC_XFER_EE_LITE(0x0c00, DoSyscall) EXC_XFER_SYS(0x0c00, DoSyscall)
/* Auxiliary Processor Unavailable Interrupt */ /* Auxiliary Processor Unavailable Interrupt */
EXCEPTION(0x2900, AP_UNAVAIL, AuxillaryProcessorUnavailable, \ EXCEPTION(0x2900, AP_UNAVAIL, AuxillaryProcessorUnavailable, \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment