[lkml]   [2010]   [Oct]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[086/103] powerpc: Dont use kernel stack with translation off
    2.6.35-stable review patch.  If anyone has any objections, please let us know.


    From: Michael Neuling <>

    commit 54a834043314c257210db2a9d59f8cc605571639 upstream.

    In f761622e59433130bc33ad086ce219feee9eb961 we changed
    early_setup_secondary so it's called using the proper kernel stack
    rather than the emergency one.

    Unfortunately, this stack pointer can't be used when translation is off
    on PHYP as this stack pointer might be outside the RMO. This results in
    the following on all non zero cpus:
    cpu 0x1: Vector: 300 (Data Access) at [c00000001639fd10]
    pc: 000000000001c50c
    lr: 000000000000821c
    sp: c00000001639ff90
    msr: 8000000000001000
    dar: c00000001639ffa0
    dsisr: 42000000
    current = 0xc000000016393540
    paca = 0xc000000006e00200
    pid = 0, comm = swapper

    The original patch was only tested on bare metal system, so it never
    caught this problem.

    This changes __secondary_start so that we calculate the new stack
    pointer but only start using it after we've called early_setup_secondary.

    With this patch, the above problem goes away.

    Signed-off-by: Michael Neuling <>
    Signed-off-by: Benjamin Herrenschmidt <>
    Signed-off-by: Greg Kroah-Hartman <>

    arch/powerpc/kernel/head_64.S | 12 +++++++++---
    1 file changed, 9 insertions(+), 3 deletions(-)

    --- a/arch/powerpc/kernel/head_64.S
    +++ b/arch/powerpc/kernel/head_64.S
    @@ -575,13 +575,19 @@ __secondary_start:
    /* Initialize the kernel stack. Just a repeat for iSeries. */
    LOAD_REG_ADDR(r3, current_set)
    sldi r28,r24,3 /* get current_set[cpu#] */
    - ldx r1,r3,r28
    - std r1,PACAKSAVE(r13)
    + ldx r14,r3,r28
    + std r14,PACAKSAVE(r13)

    /* Do early setup for that CPU (stab, slb, hash table pointer) */
    bl .early_setup_secondary

    + /*
    + * setup the new stack pointer, but *don't* use this until
    + * translation is on.
    + */
    + mr r1, r14
    /* Clear backchain so we get nice backtraces */
    li r7,0
    mtlr r7

     \ /
      Last update: 2010-10-22 21:01    [W:0.021 / U:5.980 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site