[S390] Kernel stack overflow handling.
authorHeiko Carstens <heiko.carstens@de.ibm.com>
Wed, 20 Sep 2006 13:59:22 +0000 (15:59 +0200)
committerMartin Schwidefsky <schwidefsky@de.ibm.com>
Wed, 20 Sep 2006 13:59:22 +0000 (15:59 +0200)
Substract the size of the initial stack frame from the correct
register. Otherwise we will end up in a program check loop.
Fix the offset into the save area as well.

Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
arch/s390/kernel/entry64.S

index 8b956d1..29bbfba 100644 (file)
@@ -827,7 +827,7 @@ restart_go:
  */
 stack_overflow:
        lg      %r15,__LC_PANIC_STACK   # change to panic stack
-       aghi    %r1,-SP_SIZE
+       aghi    %r15,-SP_SIZE
        mvc     SP_PSW(16,%r15),0(%r12) # move user PSW to stack
        stmg    %r0,%r11,SP_R0(%r15)    # store gprs %r0-%r11 to kernel stack
        la      %r1,__LC_SAVE_AREA
@@ -835,7 +835,7 @@ stack_overflow:
        je      0f
        chi     %r12,__LC_PGM_OLD_PSW
        je      0f
-       la      %r1,__LC_SAVE_AREA+16
+       la      %r1,__LC_SAVE_AREA+32
 0:     mvc     SP_R12(32,%r15),0(%r1)  # move %r12-%r15 to stack
         xc      __SF_BACKCHAIN(8,%r15),__SF_BACKCHAIN(%r15) # clear back chain
         la      %r2,SP_PTREGS(%r15)    # load pt_regs