lkml.org 
[lkml]   [2019]   [Feb]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC PATCH v1 10/16] powerpc/32: enter syscall with MSR_EE inconditionaly set
    Date
    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>
    ---
    arch/powerpc/kernel/head_32.S | 2 +-
    arch/powerpc/kernel/head_32.h | 4 ++++
    arch/powerpc/kernel/head_40x.S | 2 +-
    arch/powerpc/kernel/head_44x.S | 2 +-
    arch/powerpc/kernel/head_8xx.S | 2 +-
    arch/powerpc/kernel/head_booke.h | 4 ++++
    arch/powerpc/kernel/head_fsl_booke.S | 2 +-
    7 files changed, 13 insertions(+), 5 deletions(-)

    diff --git a/arch/powerpc/kernel/head_32.S b/arch/powerpc/kernel/head_32.S
    index 9410e5490c33..33fb08b2398f 100644
    --- a/arch/powerpc/kernel/head_32.S
    +++ b/arch/powerpc/kernel/head_32.S
    @@ -369,7 +369,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)
    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 @@
    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)
    diff --git a/arch/powerpc/kernel/head_40x.S b/arch/powerpc/kernel/head_40x.S
    index 3dc8a35849ff..ee6edf8a20c2 100644
    --- a/arch/powerpc/kernel/head_40x.S
    +++ b/arch/powerpc/kernel/head_40x.S
    @@ -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)
    diff --git a/arch/powerpc/kernel/head_44x.S b/arch/powerpc/kernel/head_44x.S
    index 37117ab11584..9cc01948651f 100644
    --- a/arch/powerpc/kernel/head_44x.S
    +++ b/arch/powerpc/kernel/head_44x.S
    @@ -283,7 +283,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, \
    diff --git a/arch/powerpc/kernel/head_8xx.S b/arch/powerpc/kernel/head_8xx.S
    index 083f27f383b4..dfd5a8195e5e 100644
    --- a/arch/powerpc/kernel/head_8xx.S
    +++ b/arch/powerpc/kernel/head_8xx.S
    @@ -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)
    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 @@ END_BTB_FLUSH_SECTION
    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)
    diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S
    index 1881127682e9..89f36623993d 100644
    --- a/arch/powerpc/kernel/head_fsl_booke.S
    +++ b/arch/powerpc/kernel/head_fsl_booke.S
    @@ -418,7 +418,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, \
    --
    2.13.3
    \
     
     \ /
      Last update: 2019-02-08 13:53    [W:3.666 / U:0.004 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site