[SPARC64]: Fix tl1 trap state capture/dump on SUN4V.
authorDavid S. Miller <davem@sunset.davemloft.net>
Thu, 16 Feb 2006 09:41:41 +0000 (01:41 -0800)
committerDavid S. Miller <davem@sunset.davemloft.net>
Mon, 20 Mar 2006 09:13:12 +0000 (01:13 -0800)
No trap levels above 2 in privileged mode on SUN4V.

Signed-off-by: David S. Miller <davem@davemloft.net>
arch/sparc64/kernel/etrap.S
arch/sparc64/kernel/traps.c

index a0e7d480e5dca06e9f04bbec42d1244f9386dde6..149383835c25381ff082fa47e98fb5d013d23964 100644 (file)
@@ -188,6 +188,11 @@ etraptl1:  /* Save tstate/tpc/tnpc of TL 1-->4 and the tl register itself.
                rdpr    %tt, %g3
                stx     %g3, [%g2 + STACK_BIAS + 0x38]
 
+               sethi   %hi(is_sun4v), %g3
+               lduw    [%g3 + %lo(is_sun4v)], %g3
+               brnz,pn %g3, finish_tl1_capture
+                nop
+
                wrpr    %g0, 3, %tl
                rdpr    %tstate, %g3
                stx     %g3, [%g2 + STACK_BIAS + 0x40]
@@ -210,6 +215,7 @@ etraptl1:   /* Save tstate/tpc/tnpc of TL 1-->4 and the tl register itself.
 
                stx     %g1, [%g2 + STACK_BIAS + 0x80]
 
+finish_tl1_capture:
                wrpr    %g0, 1, %tl
 661:           nop
                .section .sun4v_1insn_patch, "ax"
index bedb2f693c76805bd178feceb1e36c459ffd5bbb..5956d0a940095c40c9d3ad503e3e0c88f6baf9fa 100644 (file)
@@ -73,10 +73,12 @@ struct tl1_traplog {
 
 static void dump_tl1_traplog(struct tl1_traplog *p)
 {
-       int i;
+       int i, limit;
 
        printk("TRAPLOG: Error at trap level 0x%lx, dumping track stack.\n",
               p->tl);
+
+       limit = (tlb_type == hypervisor) ? 2 : 4;
        for (i = 0; i < 4; i++) {
                printk(KERN_CRIT
                       "TRAPLOG: Trap level %d TSTATE[%016lx] TPC[%016lx] "