mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
cpuidle/powernv: avoid double irq enable coming out of idle
Since e1689795a7
("cpuidle: Add common time keeping and irq enabling"),
cpuidle drivers are expected to return from ->enter with irqs disabled.
Update the cpuidle-powernv snooze and cede loops to disable irqs before
returning.
Signed-off-by: Nicholas Piggin <npiggin@gmail.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
f1343d0446
commit
ced54c08d8
@ -51,8 +51,6 @@ static inline void idle_loop_epilog(unsigned long in_purr)
|
||||
get_lppaca()->wait_state_cycles = cpu_to_be64(wait_cycles);
|
||||
get_lppaca()->idle = 0;
|
||||
|
||||
if (irqs_disabled())
|
||||
local_irq_enable();
|
||||
ppc64_runlatch_on();
|
||||
}
|
||||
|
||||
@ -87,6 +85,8 @@ static int snooze_loop(struct cpuidle_device *dev,
|
||||
HMT_medium();
|
||||
clear_thread_flag(TIF_POLLING_NRFLAG);
|
||||
|
||||
local_irq_disable();
|
||||
|
||||
idle_loop_epilog(in_purr);
|
||||
|
||||
return index;
|
||||
@ -121,6 +121,7 @@ static int dedicated_cede_loop(struct cpuidle_device *dev,
|
||||
HMT_medium();
|
||||
check_and_cede_processor();
|
||||
|
||||
local_irq_disable();
|
||||
get_lppaca()->donate_dedicated_cpu = 0;
|
||||
|
||||
idle_loop_epilog(in_purr);
|
||||
@ -145,6 +146,7 @@ static int shared_cede_loop(struct cpuidle_device *dev,
|
||||
*/
|
||||
check_and_cede_processor();
|
||||
|
||||
local_irq_disable();
|
||||
idle_loop_epilog(in_purr);
|
||||
|
||||
return index;
|
||||
|
Loading…
Reference in New Issue
Block a user