Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/powerpc/ibm4xx PR port-powerpc/51367: kernel panic ...



details:   https://anonhg.NetBSD.org/src/rev/e7eec3ef4b24
branches:  trunk
changeset: 820071:e7eec3ef4b24
user:      rin <rin%NetBSD.org@localhost>
date:      Wed Dec 28 09:36:02 2016 +0000

description:
PR port-powerpc/51367: kernel panic for powerpc/ibm4xx with "option DDB"

Stop using ddbstk/ipkdbstk to make nested traps possible, which avoids
kernel panics reported in the PR.

Suggested and approved by matt.

diffstat:

 sys/arch/powerpc/ibm4xx/trap_subr.S |  29 +++--------------------------
 1 files changed, 3 insertions(+), 26 deletions(-)

diffs (54 lines):

diff -r 0c4d26222769 -r e7eec3ef4b24 sys/arch/powerpc/ibm4xx/trap_subr.S
--- a/sys/arch/powerpc/ibm4xx/trap_subr.S       Wed Dec 28 09:29:35 2016 +0000
+++ b/sys/arch/powerpc/ibm4xx/trap_subr.S       Wed Dec 28 09:36:02 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: trap_subr.S,v 1.25 2016/12/26 20:28:00 rin Exp $       */
+/*     $NetBSD: trap_subr.S,v 1.26 2016/12/28 09:36:02 rin Exp $       */
 
 /*
  * Copyright 2001 Wasabi Systems, Inc.
@@ -191,20 +191,9 @@
 /*
  * In case of DDB we want a separate trap catcher for it
  */
-       .lcomm  ddbstk,INTSTK,16        /* ddb stack */
-
        .globl  _C_LABEL(ddblow),_C_LABEL(ddbsize)
 _C_LABEL(ddblow):
-       mtsprg1 %r1                     /* save SP */
-       GET_CPUINFO(%r1)
-       stmw    %r28,CI_DDBSAVE(%r1)    /* free r28-r31 */
-       mflr    %r28                    /* save LR */
-       mfcr    %r29                    /* save CR */
-       mfsrr0  %r30
-       mfsrr1  %r31
-       stmw    %r30,(CI_DDBSAVE+CPUSAVE_SRR0)(%r1)     /* save srr0/srr1 */
-       lis     %r1,ddbstk+INTSTK-CALLFRAMELEN@ha       /* get new SP */
-       addi    %r1,%r1,ddbstk+INTSTK-CALLFRAMELEN@l
+       ACCESS_PROLOG(CI_DDBSAVE)
        bla     ddbtrap
 _C_LABEL(ddbsize) = .-_C_LABEL(ddblow)
 #endif /* DDB || KGDB */
@@ -213,21 +202,9 @@
 /*
  * In case of IPKDB we want a separate trap catcher for it
  */
-
-       .lcomm  ipkdbstk,INTSTK,16      /* ipkdb stack */
-
        .globl  _C_LABEL(ipkdblow),_C_LABEL(ipkdbsize)
 _C_LABEL(ipkdblow):
-       mtsprg1 %r1                     /* save SP */
-       GET_CPUINFO(%r1)
-       stmw    %r28,CI_IPKDBSAVE(%r1)  /* free r28-r31 */
-       mflr    %r28                    /* save LR */
-       mfcr    %r29                    /* save CR */
-       mfsrr0  %r30
-       mfsrr1  %r31
-       stmw    %r30,(CI_IPKDBSAVE+CPUSAVE_SRR0)(%r1)   /* save srr0/srr1 */
-       lis     %r1,ipkdbstk+INTSTK-CALLFRAMELEN@ha     /* get new SP */
-       addi    %r1,%r1,ipkdbstk+INTSTK-CALLFRAMELEN@l
+       ACCESS_PROLOG(CI_IPKDBSAVE)
        bla     ipkdbtrap
 _C_LABEL(ipkdbsize) = .-_C_LABEL(ipkdblow)
 #endif /* IPKDB */



Home | Main Index | Thread Index | Old Index