aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/sparc64/kernel/etrap.S27
1 files changed, 15 insertions, 12 deletions
diff --git a/arch/sparc64/kernel/etrap.S b/arch/sparc64/kernel/etrap.S
index 4a0e01b14044..f2556146a735 100644
--- a/arch/sparc64/kernel/etrap.S
+++ b/arch/sparc64/kernel/etrap.S
@@ -98,37 +98,40 @@ etrap_save: save %g2, -STACK_BIAS, %sp
98 stxa %g3, [%l4] ASI_DMMU 98 stxa %g3, [%l4] ASI_DMMU
99 sethi %hi(KERNBASE), %l4 99 sethi %hi(KERNBASE), %l4
100 flush %l4 100 flush %l4
101 wr %g0, ASI_AIUS, %asi 101 mov ASI_AIUS, %l7
1022: wrpr %g0, 0x0, %tl 1022: mov %g4, %l4
103 mov %g4, %l4
104 mov %g5, %l5 103 mov %g5, %l5
105 104 add %g7, 4, %l2
106 mov %g7, %l2
107 wrpr %g0, ETRAP_PSTATE1, %pstate 105 wrpr %g0, ETRAP_PSTATE1, %pstate
108 stx %g1, [%sp + PTREGS_OFF + PT_V9_G1] 106 stx %g1, [%sp + PTREGS_OFF + PT_V9_G1]
109 stx %g2, [%sp + PTREGS_OFF + PT_V9_G2] 107 stx %g2, [%sp + PTREGS_OFF + PT_V9_G2]
108 sllx %l7, 24, %l7
110 stx %g3, [%sp + PTREGS_OFF + PT_V9_G3] 109 stx %g3, [%sp + PTREGS_OFF + PT_V9_G3]
110 rdpr %cwp, %l0
111 stx %g4, [%sp + PTREGS_OFF + PT_V9_G4] 111 stx %g4, [%sp + PTREGS_OFF + PT_V9_G4]
112 stx %g5, [%sp + PTREGS_OFF + PT_V9_G5] 112 stx %g5, [%sp + PTREGS_OFF + PT_V9_G5]
113 stx %g6, [%sp + PTREGS_OFF + PT_V9_G6] 113 stx %g6, [%sp + PTREGS_OFF + PT_V9_G6]
114
115 stx %g7, [%sp + PTREGS_OFF + PT_V9_G7] 114 stx %g7, [%sp + PTREGS_OFF + PT_V9_G7]
115 or %l7, %l0, %l7
116 sethi %hi(TSTATE_RMO | TSTATE_PEF), %l0
117 or %l7, %l0, %l7
118 wrpr %l2, %tnpc
119 wrpr %l7, (TSTATE_PRIV | TSTATE_IE), %tstate
116 stx %i0, [%sp + PTREGS_OFF + PT_V9_I0] 120 stx %i0, [%sp + PTREGS_OFF + PT_V9_I0]
117 stx %i1, [%sp + PTREGS_OFF + PT_V9_I1] 121 stx %i1, [%sp + PTREGS_OFF + PT_V9_I1]
118 stx %i2, [%sp + PTREGS_OFF + PT_V9_I2] 122 stx %i2, [%sp + PTREGS_OFF + PT_V9_I2]
119 stx %i3, [%sp + PTREGS_OFF + PT_V9_I3] 123 stx %i3, [%sp + PTREGS_OFF + PT_V9_I3]
120 stx %i4, [%sp + PTREGS_OFF + PT_V9_I4] 124 stx %i4, [%sp + PTREGS_OFF + PT_V9_I4]
121 stx %i5, [%sp + PTREGS_OFF + PT_V9_I5] 125 stx %i5, [%sp + PTREGS_OFF + PT_V9_I5]
122
123 stx %i6, [%sp + PTREGS_OFF + PT_V9_I6] 126 stx %i6, [%sp + PTREGS_OFF + PT_V9_I6]
124 stx %i7, [%sp + PTREGS_OFF + PT_V9_I7]
125 wrpr %g0, ETRAP_PSTATE2, %pstate
126 mov %l6, %g6 127 mov %l6, %g6
128 stx %i7, [%sp + PTREGS_OFF + PT_V9_I7]
127 LOAD_PER_CPU_BASE(%g5, %g6, %g4, %g3, %l1) 129 LOAD_PER_CPU_BASE(%g5, %g6, %g4, %g3, %l1)
128 jmpl %l2 + 0x4, %g0 130 ldx [%g6 + TI_TASK], %g4
129 ldx [%g6 + TI_TASK], %g4 131 done
130 132
1313: ldub [%l6 + TI_FPDEPTH], %l5 1333: mov ASI_P, %l7
134 ldub [%l6 + TI_FPDEPTH], %l5
132 add %l6, TI_FPSAVED + 1, %l4 135 add %l6, TI_FPSAVED + 1, %l4
133 srl %l5, 1, %l3 136 srl %l5, 1, %l3
134 add %l5, 2, %l5 137 add %l5, 2, %l5