diff mbox

PPC: Only enter MSR_POW when no interrupts pending

Message ID 1396817736-26801-1-git-send-email-agraf@suse.de
State New
Headers show

Commit Message

Alexander Graf April 6, 2014, 8:55 p.m. UTC
We were entering the power saving state even when interrupts (like an
external interrupt or a decrementer interrupt) were still in flight.

In case we find a pending interrupt, don't enter power saving state.

Signed-off-by: Alexander Graf <agraf@suse.de>
---
 target-ppc/helper_regs.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Tom Musta April 7, 2014, 5:28 p.m. UTC | #1
On 4/6/2014 3:55 PM, Alexander Graf wrote:
> We were entering the power saving state even when interrupts (like an
> external interrupt or a decrementer interrupt) were still in flight.
> 
> In case we find a pending interrupt, don't enter power saving state.
> 
> Signed-off-by: Alexander Graf <agraf@suse.de>
> ---
>  target-ppc/helper_regs.h | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/target-ppc/helper_regs.h b/target-ppc/helper_regs.h
> index f7ec9c2..271fddf 100644
> --- a/target-ppc/helper_regs.h
> +++ b/target-ppc/helper_regs.h
> @@ -101,7 +101,7 @@ static inline int hreg_store_msr(CPUPPCState *env, target_ulong value,
>      hreg_compute_hflags(env);
>  #if !defined(CONFIG_USER_ONLY)
>      if (unlikely(msr_pow == 1)) {
> -        if ((*env->check_pow)(env)) {
> +        if (!env->pending_interrupts && (*env->check_pow)(env)) {
>              cs->halted = 1;
>              excp = EXCP_HALTED;
>          }
> 

Reviewed-by: Tom Musta <tmusta@gmail.com>
diff mbox

Patch

diff --git a/target-ppc/helper_regs.h b/target-ppc/helper_regs.h
index f7ec9c2..271fddf 100644
--- a/target-ppc/helper_regs.h
+++ b/target-ppc/helper_regs.h
@@ -101,7 +101,7 @@  static inline int hreg_store_msr(CPUPPCState *env, target_ulong value,
     hreg_compute_hflags(env);
 #if !defined(CONFIG_USER_ONLY)
     if (unlikely(msr_pow == 1)) {
-        if ((*env->check_pow)(env)) {
+        if (!env->pending_interrupts && (*env->check_pow)(env)) {
             cs->halted = 1;
             excp = EXCP_HALTED;
         }