mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
cpuidle: powerpc: no memory barrier after break from idle
A memory barrier is not required after the task wakes up, only if we clear the polling flag before waking. The case where we have work to do is the important one, so optimise for it. Reviewed-by: Vaidyanathan Srinivasan <[email protected]> Signed-off-by: Nicholas Piggin <[email protected]> Signed-off-by: Michael Ellerman <[email protected]>
This commit is contained in:
parent
624e46d035
commit
7ded429152
2 changed files with 18 additions and 4 deletions
|
|
@ -59,14 +59,21 @@ static int snooze_loop(struct cpuidle_device *dev,
|
|||
ppc64_runlatch_off();
|
||||
HMT_very_low();
|
||||
while (!need_resched()) {
|
||||
if (likely(snooze_timeout_en) && get_tb() > snooze_exit_time)
|
||||
if (likely(snooze_timeout_en) && get_tb() > snooze_exit_time) {
|
||||
/*
|
||||
* Task has not woken up but we are exiting the polling
|
||||
* loop anyway. Require a barrier after polling is
|
||||
* cleared to order subsequent test of need_resched().
|
||||
*/
|
||||
clear_thread_flag(TIF_POLLING_NRFLAG);
|
||||
smp_mb();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
HMT_medium();
|
||||
ppc64_runlatch_on();
|
||||
clear_thread_flag(TIF_POLLING_NRFLAG);
|
||||
smp_mb();
|
||||
|
||||
return index;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,13 +71,20 @@ static int snooze_loop(struct cpuidle_device *dev,
|
|||
while (!need_resched()) {
|
||||
HMT_low();
|
||||
HMT_very_low();
|
||||
if (snooze_timeout_en && get_tb() > snooze_exit_time)
|
||||
if (likely(snooze_timeout_en) && get_tb() > snooze_exit_time) {
|
||||
/*
|
||||
* Task has not woken up but we are exiting the polling
|
||||
* loop anyway. Require a barrier after polling is
|
||||
* cleared to order subsequent test of need_resched().
|
||||
*/
|
||||
clear_thread_flag(TIF_POLLING_NRFLAG);
|
||||
smp_mb();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
HMT_medium();
|
||||
clear_thread_flag(TIF_POLLING_NRFLAG);
|
||||
smp_mb();
|
||||
|
||||
idle_loop_epilog(in_purr);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue