|
@@ -101,7 +101,23 @@ _GLOBAL(power7_powersave_common)
|
|
|
std r9,_MSR(r1)
|
|
|
std r1,PACAR1(r13)
|
|
|
|
|
|
-_GLOBAL(power7_enter_nap_mode)
|
|
|
+ /*
|
|
|
+ * Go to real mode to do the nap, as required by the architecture.
|
|
|
+ * Also, we need to be in real mode before setting hwthread_state,
|
|
|
+ * because as soon as we do that, another thread can switch
|
|
|
+ * the MMU context to the guest.
|
|
|
+ */
|
|
|
+ LOAD_REG_IMMEDIATE(r5, MSR_IDLE)
|
|
|
+ li r6, MSR_RI
|
|
|
+ andc r6, r9, r6
|
|
|
+ LOAD_REG_ADDR(r7, power7_enter_nap_mode)
|
|
|
+ mtmsrd r6, 1 /* clear RI before setting SRR0/1 */
|
|
|
+ mtspr SPRN_SRR0, r7
|
|
|
+ mtspr SPRN_SRR1, r5
|
|
|
+ rfid
|
|
|
+
|
|
|
+ .globl power7_enter_nap_mode
|
|
|
+power7_enter_nap_mode:
|
|
|
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
|
|
/* Tell KVM we're napping */
|
|
|
li r4,KVM_HWTHREAD_IN_NAP
|