mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-15 06:55:13 +08:00
powerpc/64s/idle: POWER9 implement a separate idle stop function for hotplug
Implement a new function to invoke stop, power9_offline_stop, which is like power9_idle_stop but used by the cpu hotplug code. Move KVM secondary state manipulation code to the offline case. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
d40b6768e4
commit
3d4fbffdd7
arch/powerpc
@ -518,6 +518,7 @@ extern int powersave_nap; /* set if nap mode can be used in idle loop */
|
||||
extern unsigned long power7_idle_insn(unsigned long type); /* PNV_THREAD_NAP/etc*/
|
||||
extern void power7_idle_type(unsigned long type);
|
||||
extern unsigned long power9_idle_stop(unsigned long psscr_val);
|
||||
extern unsigned long power9_offline_stop(unsigned long psscr_val);
|
||||
extern void power9_idle_type(unsigned long stop_psscr_val,
|
||||
unsigned long stop_psscr_mask);
|
||||
|
||||
|
@ -325,12 +325,6 @@ 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 */
|
||||
li r4,KVM_HWTHREAD_IN_IDLE
|
||||
/* DO THIS IN REAL MODE! See comment above. */
|
||||
stb r4,HSTATE_HWTHREAD_STATE(r13)
|
||||
#endif
|
||||
/*
|
||||
* Check if we are executing the lite variant with ESL=EC=0
|
||||
*/
|
||||
@ -425,6 +419,24 @@ ALT_FTR_SECTION_END_NESTED_IFSET(CPU_FTR_ARCH_207S, 66); \
|
||||
ld r3,ORIG_GPR3(r1); /* Restore original r3 */ \
|
||||
20: nop;
|
||||
|
||||
/*
|
||||
* Entered with MSR[EE]=0 and no soft-masked interrupts pending.
|
||||
* r3 contains desired PSSCR register value.
|
||||
*/
|
||||
_GLOBAL(power9_offline_stop)
|
||||
std r3, PACA_REQ_PSSCR(r13)
|
||||
mtspr SPRN_PSSCR,r3
|
||||
#ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
|
||||
/* 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
|
||||
LOAD_REG_ADDR(r4,power_enter_stop)
|
||||
b pnv_powersave_common
|
||||
/* No return */
|
||||
|
||||
|
||||
/*
|
||||
* Entered with MSR[EE]=0 and no soft-masked interrupts pending.
|
||||
* r3 contains desired PSSCR register value.
|
||||
|
@ -511,7 +511,7 @@ unsigned long pnv_cpu_offline(unsigned int cpu)
|
||||
psscr = mfspr(SPRN_PSSCR);
|
||||
psscr = (psscr & ~pnv_deepest_stop_psscr_mask) |
|
||||
pnv_deepest_stop_psscr_val;
|
||||
srr1 = power9_idle_stop(psscr);
|
||||
srr1 = power9_offline_stop(psscr);
|
||||
|
||||
} else if ((idle_states & OPAL_PM_WINKLE_ENABLED) &&
|
||||
(idle_states & OPAL_PM_LOSE_FULL_CONTEXT)) {
|
||||
|
Loading…
Reference in New Issue
Block a user