|
@@ -242,13 +242,20 @@ enter_winkle:
|
|
|
/*
|
|
|
* r3 - PSSCR value corresponding to the requested stop state.
|
|
|
*/
|
|
|
-power_enter_stop:
|
|
|
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
|
|
- /* Tell KVM we're entering idle */
|
|
|
+power_enter_stop_kvm_rm:
|
|
|
+ /*
|
|
|
+ * This is currently unused because POWER9 KVM does not have to
|
|
|
+ * gather secondary threads into sibling mode, but the code is
|
|
|
+ * here in case that function is required.
|
|
|
+ *
|
|
|
+ * Tell KVM we're entering idle.
|
|
|
+ */
|
|
|
li r4,KVM_HWTHREAD_IN_IDLE
|
|
|
/* DO THIS IN REAL MODE! See comment above. */
|
|
|
stb r4,HSTATE_HWTHREAD_STATE(r13)
|
|
|
#endif
|
|
|
+power_enter_stop:
|
|
|
/*
|
|
|
* Check if we are executing the lite variant with ESL=EC=0
|
|
|
*/
|
|
@@ -411,6 +418,18 @@ pnv_powersave_wakeup_mce:
|
|
|
|
|
|
b pnv_powersave_wakeup
|
|
|
|
|
|
+#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
|
|
+kvm_start_guest_check:
|
|
|
+ li r0,KVM_HWTHREAD_IN_KERNEL
|
|
|
+ stb r0,HSTATE_HWTHREAD_STATE(r13)
|
|
|
+ /* Order setting hwthread_state vs. testing hwthread_req */
|
|
|
+ sync
|
|
|
+ lbz r0,HSTATE_HWTHREAD_REQ(r13)
|
|
|
+ cmpwi r0,0
|
|
|
+ beqlr
|
|
|
+ b kvm_start_guest
|
|
|
+#endif
|
|
|
+
|
|
|
/*
|
|
|
* Called from reset vector for powersave wakeups.
|
|
|
* cr3 - set to gt if waking up with partial/complete hypervisor state loss
|
|
@@ -435,15 +454,9 @@ ALT_FTR_SECTION_END_IFSET(CPU_FTR_ARCH_300)
|
|
|
mr r3,r12
|
|
|
|
|
|
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
|
|
- li r0,KVM_HWTHREAD_IN_KERNEL
|
|
|
- stb r0,HSTATE_HWTHREAD_STATE(r13)
|
|
|
- /* Order setting hwthread_state vs. testing hwthread_req */
|
|
|
- sync
|
|
|
- lbz r0,HSTATE_HWTHREAD_REQ(r13)
|
|
|
- cmpwi r0,0
|
|
|
- beq 1f
|
|
|
- b kvm_start_guest
|
|
|
-1:
|
|
|
+BEGIN_FTR_SECTION
|
|
|
+ bl kvm_start_guest_check
|
|
|
+END_FTR_SECTION_IFCLR(CPU_FTR_ARCH_300)
|
|
|
#endif
|
|
|
|
|
|
/* Return SRR1 from power7_nap() */
|