Subject: [PATCH 5/8] powerpc/64s: use PACA_THREAD_IDLE_STATE only in POWER8

From: Nicholas Piggin <[email-masked]>
Date: Tue, 14 Mar 2017 19:23:46 +1000

POWER9 does not use this field, so it should be moved into the POWER8
code. Update the documentation in the paca struct too.

Signed-off-by: Nicholas Piggin <[email-masked]>
---
 arch/powerpc/include/asm/paca.h   | 12 ++++++++++--
 arch/powerpc/kernel/idle_book3s.S | 13 +++++++------
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/arch/powerpc/include/asm/paca.h b/arch/powerpc/include/asm/paca.h
index 708c3e592eeb..bbb59e226a9f 100644
--- a/arch/powerpc/include/asm/paca.h
+++ b/arch/powerpc/include/asm/paca.h
@@ -165,11 +165,19 @@ struct paca_struct {
 #endif
 
 #ifdef CONFIG_PPC_POWERNV
-	/* Per-core mask tracking idle threads and a lock bit-[L][TTTTTTTT] */
+	/* CPU idle fields */
+
+	/*
+	 * Per-core word used to synchronize between threads. See
+	 * asm/cpuidle.h, PNV_CORE_IDLE_*
+	 */
 	u32 *core_idle_state_ptr;
-	u8 thread_idle_state;		/* PNV_THREAD_RUNNING/NAP/SLEEP	*/
 	/* Mask to indicate thread id in core */
 	u8 thread_mask;
+
+	/* POWER8 specific fields */
+	/* PNV_THREAD_RUNNING/NAP/SLEEP	*/
+	u8 thread_idle_state;
 	/* Mask to denote subcore sibling threads */
 	u8 subcore_sibling_mask;
 #endif
diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S
index 9284ea0762b1..9bdfba75a5e7 100644
--- a/arch/powerpc/kernel/idle_book3s.S
+++ b/arch/powerpc/kernel/idle_book3s.S
@@ -389,9 +389,6 @@ FTR_SECTION_ELSE
 	bl	pnv_restore_hyp_resource_arch207
 ALT_FTR_SECTION_END_IFSET(CPU_FTR_ARCH_300)
 
-	li	r0,PNV_THREAD_RUNNING
-	stb	r0,PACA_THREAD_IDLE_STATE(r13)	/* Clear thread state */
-
 #ifdef CONFIG_KVM_BOOK3S_HV_POSSIBLE
 	li	r0,KVM_HWTHREAD_IN_KERNEL
 	stb	r0,HSTATE_HWTHREAD_STATE(r13)
@@ -445,9 +442,13 @@ pnv_restore_hyp_resource_arch207:
 	ld	r2,PACATOC(r13);
 
 	lbz	r0,PACA_THREAD_IDLE_STATE(r13)
-	cmpwi   cr2,r0,PNV_THREAD_NAP
-	cmpwi   cr4,r0,PNV_THREAD_WINKLE
-	bgt     cr2,pnv_wakeup_tb_loss	/* Either sleep or Winkle */
+	cmpwi	cr2,r0,PNV_THREAD_NAP
+	cmpwi	cr4,r0,PNV_THREAD_WINKLE
+	li	r0,PNV_THREAD_RUNNING
+	stb	r0,PACA_THREAD_IDLE_STATE(r13)	/* Clear thread state */
+
+	bgt	cr2,pnv_wakeup_tb_loss	/* Either sleep or Winkle */
+
 
 	/*
 	 * We fall through here if PACA_THREAD_IDLE_STATE shows we are waking
-- 
2.11.0