aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/cpuidle
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/cpuidle')
-rw-r--r--drivers/cpuidle/cpuidle-pseries.c5
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
30static inline void idle_loop_prolog(unsigned long *in_purr) 30static 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
50static int snooze_loop(struct cpuidle_device *dev, 55static int snooze_loop(struct cpuidle_device *dev,