Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1477962 > unrolled thread
| Started by | "Gautham R. Shenoy" <ego@linux.vnet.ibm.com> |
|---|---|
| First post | 2016-09-07 07:20 +0200 |
| Last post | 2016-09-08 04:20 +0200 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
[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
| From | "Gautham R. Shenoy" <ego@linux.vnet.ibm.com> |
|---|---|
| Date | 2016-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]
| From | "Shreyas B. Prabhu" <shreyasbp@gmail.com> |
|---|---|
| Date | 2016-09-08 04:20 +0200 |
| Subject | Re: [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