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>
This commit is contained in:
parent
ef4291243f
commit
f97dec21a3
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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, \
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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, \
|
||||
|
|
Loading…
Reference in New Issue