diff options
Diffstat (limited to 'drivers/cpuidle')
-rw-r--r-- | drivers/cpuidle/cpuidle-pseries.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/drivers/cpuidle/cpuidle-pseries.c b/drivers/cpuidle/cpuidle-pseries.c index 7ab564aa0b1c..d4864892951b 100644 --- a/drivers/cpuidle/cpuidle-pseries.c +++ b/drivers/cpuidle/cpuidle-pseries.c | |||
@@ -29,6 +29,7 @@ static struct cpuidle_state *cpuidle_state_table; | |||
29 | 29 | ||
30 | static inline void idle_loop_prolog(unsigned long *in_purr) | 30 | static inline void idle_loop_prolog(unsigned long *in_purr) |
31 | { | 31 | { |
32 | ppc64_runlatch_off(); | ||
32 | *in_purr = mfspr(SPRN_PURR); | 33 | *in_purr = mfspr(SPRN_PURR); |
33 | /* | 34 | /* |
34 | * Indicate to the HV that we are idle. Now would be | 35 | * Indicate to the HV that we are idle. Now would be |
@@ -45,6 +46,10 @@ static inline void idle_loop_epilog(unsigned long in_purr) | |||
45 | wait_cycles += mfspr(SPRN_PURR) - in_purr; | 46 | wait_cycles += mfspr(SPRN_PURR) - in_purr; |
46 | get_lppaca()->wait_state_cycles = cpu_to_be64(wait_cycles); | 47 | get_lppaca()->wait_state_cycles = cpu_to_be64(wait_cycles); |
47 | get_lppaca()->idle = 0; | 48 | get_lppaca()->idle = 0; |
49 | |||
50 | if (irqs_disabled()) | ||
51 | local_irq_enable(); | ||
52 | ppc64_runlatch_on(); | ||
48 | } | 53 | } |
49 | 54 | ||
50 | static int snooze_loop(struct cpuidle_device *dev, | 55 | static int snooze_loop(struct cpuidle_device *dev, |