lkml.org 
[lkml]   [2014]   [Dec]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.10 21/45] powerpc/pseries: Fix endiannes issue in RTAS call from xmon
    Date
    3.10-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Laurent Dufour <ldufour@linux.vnet.ibm.com>

    commit 3b8a3c01096925a824ed3272601082289d9c23a5 upstream.

    On pseries system (LPAR) xmon failed to enter when running in LE mode,
    system is hunging. Inititating xmon will lead to such an output on the
    console:

    SysRq : Entering xmon
    cpu 0x15: Vector: 0 at [c0000003f39ffb10]
    pc: c00000000007ed7c: sysrq_handle_xmon+0x5c/0x70
    lr: c00000000007ed7c: sysrq_handle_xmon+0x5c/0x70
    sp: c0000003f39ffc70
    msr: 8000000000009033
    current = 0xc0000003fafa7180
    paca = 0xc000000007d75e80 softe: 0 irq_happened: 0x01
    pid = 14617, comm = bash
    Bad kernel stack pointer fafb4b0 at eca7cc4
    cpu 0x15: Vector: 300 (Data Access) at [c000000007f07d40]
    pc: 000000000eca7cc4
    lr: 000000000eca7c44
    sp: fafb4b0
    msr: 8000000000001000
    dar: 10000000
    dsisr: 42000000
    current = 0xc0000003fafa7180
    paca = 0xc000000007d75e80 softe: 0 irq_happened: 0x01
    pid = 14617, comm = bash
    cpu 0x15: Exception 300 (Data Access) in xmon, returning to main loop
    xmon: WARNING: bad recursive fault on cpu 0x15

    The root cause is that xmon is calling RTAS to turn off the surveillance
    when entering xmon, and RTAS is requiring big endian parameters.

    This patch is byte swapping the RTAS arguments when running in LE mode.

    Signed-off-by: Laurent Dufour <ldufour@linux.vnet.ibm.com>
    Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/powerpc/xmon/xmon.c | 6 +++---
    1 file changed, 3 insertions(+), 3 deletions(-)

    --- a/arch/powerpc/xmon/xmon.c
    +++ b/arch/powerpc/xmon/xmon.c
    @@ -288,10 +288,10 @@ static inline void disable_surveillance(
    args.token = rtas_token("set-indicator");
    if (args.token == RTAS_UNKNOWN_SERVICE)
    return;
    - args.nargs = 3;
    - args.nret = 1;
    + args.nargs = cpu_to_be32(3);
    + args.nret = cpu_to_be32(1);
    args.rets = &args.args[3];
    - args.args[0] = SURVEILLANCE_TOKEN;
    + args.args[0] = cpu_to_be32(SURVEILLANCE_TOKEN);
    args.args[1] = 0;
    args.args[2] = 0;
    enter_rtas(__pa(&args));



    \
     
     \ /
      Last update: 2014-12-06 01:01    [W:6.079 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site