|
@@ -180,6 +180,20 @@ _GLOBAL(tm_reclaim)
|
|
|
|
|
|
std r11, GPR11(r1) /* Temporary stash */
|
|
std r11, GPR11(r1) /* Temporary stash */
|
|
|
|
|
|
|
|
+ /*
|
|
|
|
+ * Move the saved user r1 to the kernel stack in case PACATMSCRATCH is
|
|
|
|
+ * clobbered by an exception once we turn on MSR_RI below.
|
|
|
|
+ */
|
|
|
|
+ ld r11, PACATMSCRATCH(r13)
|
|
|
|
+ std r11, GPR1(r1)
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Store r13 away so we can free up the scratch SPR for the SLB fault
|
|
|
|
+ * handler (needed once we start accessing the thread_struct).
|
|
|
|
+ */
|
|
|
|
+ GET_SCRATCH0(r11)
|
|
|
|
+ std r11, GPR13(r1)
|
|
|
|
+
|
|
/* Reset MSR RI so we can take SLB faults again */
|
|
/* Reset MSR RI so we can take SLB faults again */
|
|
li r11, MSR_RI
|
|
li r11, MSR_RI
|
|
mtmsrd r11, 1
|
|
mtmsrd r11, 1
|
|
@@ -210,11 +224,11 @@ _GLOBAL(tm_reclaim)
|
|
SAVE_GPR(8, r7) /* user r8 */
|
|
SAVE_GPR(8, r7) /* user r8 */
|
|
SAVE_GPR(9, r7) /* user r9 */
|
|
SAVE_GPR(9, r7) /* user r9 */
|
|
SAVE_GPR(10, r7) /* user r10 */
|
|
SAVE_GPR(10, r7) /* user r10 */
|
|
- ld r3, PACATMSCRATCH(r13) /* user r1 */
|
|
|
|
|
|
+ ld r3, GPR1(r1) /* user r1 */
|
|
ld r4, GPR7(r1) /* user r7 */
|
|
ld r4, GPR7(r1) /* user r7 */
|
|
ld r5, GPR11(r1) /* user r11 */
|
|
ld r5, GPR11(r1) /* user r11 */
|
|
ld r6, GPR12(r1) /* user r12 */
|
|
ld r6, GPR12(r1) /* user r12 */
|
|
- GET_SCRATCH0(8) /* user r13 */
|
|
|
|
|
|
+ ld r8, GPR13(r1) /* user r13 */
|
|
std r3, GPR1(r7)
|
|
std r3, GPR1(r7)
|
|
std r4, GPR7(r7)
|
|
std r4, GPR7(r7)
|
|
std r5, GPR11(r7)
|
|
std r5, GPR11(r7)
|