|
@@ -195,6 +195,11 @@ sun4v_tsb_miss_common:
|
|
ldx [%g2 + TRAP_PER_CPU_PGD_PADDR], %g7
|
|
ldx [%g2 + TRAP_PER_CPU_PGD_PADDR], %g7
|
|
|
|
|
|
sun4v_itlb_error:
|
|
sun4v_itlb_error:
|
|
|
|
+ rdpr %tl, %g1
|
|
|
|
+ cmp %g1, 1
|
|
|
|
+ ble,pt %icc, sun4v_bad_ra
|
|
|
|
+ or %g0, FAULT_CODE_BAD_RA | FAULT_CODE_ITLB, %g1
|
|
|
|
+
|
|
sethi %hi(sun4v_err_itlb_vaddr), %g1
|
|
sethi %hi(sun4v_err_itlb_vaddr), %g1
|
|
stx %g4, [%g1 + %lo(sun4v_err_itlb_vaddr)]
|
|
stx %g4, [%g1 + %lo(sun4v_err_itlb_vaddr)]
|
|
sethi %hi(sun4v_err_itlb_ctx), %g1
|
|
sethi %hi(sun4v_err_itlb_ctx), %g1
|
|
@@ -206,15 +211,10 @@ sun4v_itlb_error:
|
|
sethi %hi(sun4v_err_itlb_error), %g1
|
|
sethi %hi(sun4v_err_itlb_error), %g1
|
|
stx %o0, [%g1 + %lo(sun4v_err_itlb_error)]
|
|
stx %o0, [%g1 + %lo(sun4v_err_itlb_error)]
|
|
|
|
|
|
|
|
+ sethi %hi(1f), %g7
|
|
rdpr %tl, %g4
|
|
rdpr %tl, %g4
|
|
- cmp %g4, 1
|
|
|
|
- ble,pt %icc, 1f
|
|
|
|
- sethi %hi(2f), %g7
|
|
|
|
ba,pt %xcc, etraptl1
|
|
ba,pt %xcc, etraptl1
|
|
- or %g7, %lo(2f), %g7
|
|
|
|
-
|
|
|
|
-1: ba,pt %xcc, etrap
|
|
|
|
-2: or %g7, %lo(2b), %g7
|
|
|
|
|
|
+1: or %g7, %lo(1f), %g7
|
|
mov %l4, %o1
|
|
mov %l4, %o1
|
|
call sun4v_itlb_error_report
|
|
call sun4v_itlb_error_report
|
|
add %sp, PTREGS_OFF, %o0
|
|
add %sp, PTREGS_OFF, %o0
|
|
@@ -222,6 +222,11 @@ sun4v_itlb_error:
|
|
/* NOTREACHED */
|
|
/* NOTREACHED */
|
|
|
|
|
|
sun4v_dtlb_error:
|
|
sun4v_dtlb_error:
|
|
|
|
+ rdpr %tl, %g1
|
|
|
|
+ cmp %g1, 1
|
|
|
|
+ ble,pt %icc, sun4v_bad_ra
|
|
|
|
+ or %g0, FAULT_CODE_BAD_RA | FAULT_CODE_DTLB, %g1
|
|
|
|
+
|
|
sethi %hi(sun4v_err_dtlb_vaddr), %g1
|
|
sethi %hi(sun4v_err_dtlb_vaddr), %g1
|
|
stx %g4, [%g1 + %lo(sun4v_err_dtlb_vaddr)]
|
|
stx %g4, [%g1 + %lo(sun4v_err_dtlb_vaddr)]
|
|
sethi %hi(sun4v_err_dtlb_ctx), %g1
|
|
sethi %hi(sun4v_err_dtlb_ctx), %g1
|
|
@@ -233,21 +238,23 @@ sun4v_dtlb_error:
|
|
sethi %hi(sun4v_err_dtlb_error), %g1
|
|
sethi %hi(sun4v_err_dtlb_error), %g1
|
|
stx %o0, [%g1 + %lo(sun4v_err_dtlb_error)]
|
|
stx %o0, [%g1 + %lo(sun4v_err_dtlb_error)]
|
|
|
|
|
|
|
|
+ sethi %hi(1f), %g7
|
|
rdpr %tl, %g4
|
|
rdpr %tl, %g4
|
|
- cmp %g4, 1
|
|
|
|
- ble,pt %icc, 1f
|
|
|
|
- sethi %hi(2f), %g7
|
|
|
|
ba,pt %xcc, etraptl1
|
|
ba,pt %xcc, etraptl1
|
|
- or %g7, %lo(2f), %g7
|
|
|
|
-
|
|
|
|
-1: ba,pt %xcc, etrap
|
|
|
|
-2: or %g7, %lo(2b), %g7
|
|
|
|
|
|
+1: or %g7, %lo(1f), %g7
|
|
mov %l4, %o1
|
|
mov %l4, %o1
|
|
call sun4v_dtlb_error_report
|
|
call sun4v_dtlb_error_report
|
|
add %sp, PTREGS_OFF, %o0
|
|
add %sp, PTREGS_OFF, %o0
|
|
|
|
|
|
/* NOTREACHED */
|
|
/* NOTREACHED */
|
|
|
|
|
|
|
|
+sun4v_bad_ra:
|
|
|
|
+ or %g0, %g4, %g5
|
|
|
|
+ ba,pt %xcc, sparc64_realfault_common
|
|
|
|
+ or %g1, %g0, %g4
|
|
|
|
+
|
|
|
|
+ /* NOTREACHED */
|
|
|
|
+
|
|
/* Instruction Access Exception, tl0. */
|
|
/* Instruction Access Exception, tl0. */
|
|
sun4v_iacc:
|
|
sun4v_iacc:
|
|
ldxa [%g0] ASI_SCRATCHPAD, %g2
|
|
ldxa [%g0] ASI_SCRATCHPAD, %g2
|