Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1477962 > unrolled thread

[PATCH] powernv: Restore SPRs correctly upon wake up from hypervisor state loss

Started by"Gautham R. Shenoy" <ego@linux.vnet.ibm.com>
First post2016-09-07 07:20 +0200
Last post2016-09-08 04:20 +0200
Articles 2 — 2 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] powernv: Restore SPRs correctly upon wake up from hypervisor state loss "Gautham R. Shenoy" <ego@linux.vnet.ibm.com> - 2016-09-07 07:20 +0200
    Re: [PATCH] powernv: Restore SPRs correctly upon wake up from  hypervisor state loss "Shreyas B. Prabhu" <shreyasbp@gmail.com> - 2016-09-08 04:20 +0200

#1477962 — [PATCH] powernv: Restore SPRs correctly upon wake up from hypervisor state loss

From"Gautham R. Shenoy" <ego@linux.vnet.ibm.com>
Date2016-09-07 07:20 +0200
Subject[PATCH] powernv: Restore SPRs correctly upon wake up from hypervisor state loss
Message-ID<seDrb-3Tn-3@gated-at.bofh.it>
From: "Gautham R. Shenoy" <ego@linux.vnet.ibm.com>

pnv_wakeup_tb_loss function currently expects the cr4 to be "eq" if
the CPU is waking up from a complete hypervisor state loss. Hence, it
currently restores the SPR contents only if cr4 is "eq".

However, after the commit bcef83a00dc4 ("powerpc/powernv: Add platform
support for stop instruction"), on ISA_V300 CPUs, the function
pnv_restore_hyp_resource sets cr4 to contain the result of the
comparison between state the CPU has woken up and the first deepest
stop state before calling pnv_wakeup_tb_loss.

Thus if the CPU woke up from a state that is deeper than the first
deepest stop state, cr4 have "gt" set and hence, pnv_wakeup_tb_loss
will fail to restore the SPRs on waking up from such a state.

Fix the code in pnv_wakeup_tb_loss to restore the SPR states when cr4 is
"eq" or "gt".

Fixes: Commit bcef83a00dc4 ("powerpc/powernv: Add platform support for
stop instruction")

Cc: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
Cc: Michael Neuling <michael.neuling@au1.ibm.com>
Cc: Michael Ellerman <mpe@ellerman.id.au>
Cc: Shreyas B. Prabhu <shreyasbp@gmail.com>
Signed-off-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
---
 arch/powerpc/kernel/idle_book3s.S | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/arch/powerpc/kernel/idle_book3s.S b/arch/powerpc/kernel/idle_book3s.S
index 2265c63..bd739fe 100644
--- a/arch/powerpc/kernel/idle_book3s.S
+++ b/arch/powerpc/kernel/idle_book3s.S
@@ -411,7 +411,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_ARCH_300)
  *
  * r13 - PACA
  * cr3 - gt if waking up with partial/complete hypervisor state loss
- * cr4 - eq if waking up from complete hypervisor state loss.
+ * cr4 - gt or eq if waking up from complete hypervisor state loss.
  */
 _GLOBAL(pnv_wakeup_tb_loss)
 	ld	r1,PACAR1(r13)
@@ -453,7 +453,7 @@ lwarx_loop2:
 	 * At this stage
 	 * cr2 - eq if first thread to wakeup in core
 	 * cr3-  gt if waking up with partial/complete hypervisor state loss
-	 * cr4 - eq if waking up from complete hypervisor state loss.
+	 * cr4 - gt or eq if waking up from complete hypervisor state loss.
 	 */
 
 	ori	r15,r15,PNV_CORE_IDLE_LOCK_BIT
@@ -481,7 +481,7 @@ first_thread_in_subcore:
 	 * If waking up from sleep, subcore state is not lost. Hence
 	 * skip subcore state restore
 	 */
-	bne	cr4,subcore_state_restored
+	blt	cr4,subcore_state_restored
 
 	/* Restore per-subcore state */
 	ld      r4,_SDR1(r1)
@@ -526,7 +526,7 @@ timebase_resync:
 	 * If waking up from sleep, per core state is not lost, skip to
 	 * clear_lock.
 	 */
-	bne	cr4,clear_lock
+	blt	cr4,clear_lock
 
 	/*
 	 * First thread in the core to wake up and its waking up with
@@ -557,7 +557,7 @@ common_exit:
 	 * If waking up from sleep, hypervisor state is not lost. Hence
 	 * skip hypervisor state restore.
 	 */
-	bne	cr4,hypervisor_state_restored
+	blt	cr4,hypervisor_state_restored
 
 	/* Waking up from winkle */
 
-- 
1.9.4

[toc] | [next] | [standalone]


#1478734 — Re: [PATCH] powernv: Restore SPRs correctly upon wake up from hypervisor state loss

From"Shreyas B. Prabhu" <shreyasbp@gmail.com>
Date2016-09-08 04:20 +0200
SubjectRe: [PATCH] powernv: Restore SPRs correctly upon wake up from hypervisor state loss
Message-ID<seX6x-8fF-1@gated-at.bofh.it>
In reply to#1477962
Hi Gautham,

Thanks for fixing this.

On Wed, Sep 7, 2016 at 1:16 AM, Gautham R. Shenoy
<ego@linux.vnet.ibm.com> wrote:
> From: "Gautham R. Shenoy" <ego@linux.vnet.ibm.com>
>
> pnv_wakeup_tb_loss function currently expects the cr4 to be "eq" if
> the CPU is waking up from a complete hypervisor state loss. Hence, it
> currently restores the SPR contents only if cr4 is "eq".
>
> However, after the commit bcef83a00dc4 ("powerpc/powernv: Add platform
> support for stop instruction"), on ISA_V300 CPUs, the function
> pnv_restore_hyp_resource sets cr4 to contain the result of the
> comparison between state the CPU has woken up and the first deepest
> stop state before calling pnv_wakeup_tb_loss.
>
> Thus if the CPU woke up from a state that is deeper than the first
> deepest stop state, cr4 have "gt" set and hence, pnv_wakeup_tb_loss
> will fail to restore the SPRs on waking up from such a state.
>
> Fix the code in pnv_wakeup_tb_loss to restore the SPR states when cr4 is
> "eq" or "gt".
>
> Fixes: Commit bcef83a00dc4 ("powerpc/powernv: Add platform support for
> stop instruction")
>
> Cc: Vaidyanathan Srinivasan <svaidy@linux.vnet.ibm.com>
> Cc: Michael Neuling <michael.neuling@au1.ibm.com>
> Cc: Michael Ellerman <mpe@ellerman.id.au>
> Cc: Shreyas B. Prabhu <shreyasbp@gmail.com>
> Signed-off-by: Gautham R. Shenoy <ego@linux.vnet.ibm.com>
> ---

Reviewed-by: Shreyas B. Prabhu <shreyasbp@gmail.com>


Thanks,
Shreyas

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web