diff options
author | Dmitry Osipenko <[email protected]> | 2020-02-25 01:40:50 +0300 |
---|---|---|
committer | Thierry Reding <[email protected]> | 2020-03-13 11:23:09 +0100 |
commit | f0c69bdfb0728a7cd0e065c7db434465bd50904c (patch) | |
tree | 8cd524fd7a65c8a31f371f5ccb5ac0eea93504ac | |
parent | 51da5f1cd83444024db3f1d96eccf269e25a46bc (diff) |
ARM: tegra: cpuidle: Make abort_flag atomic
Replace memory accessors with atomic API just to make code consistent
with the abort_barrier. The new variant may be even more correct now
since atomic_read() will prevent compiler from generating wrong things
like carrying abort_flag value in a register instead of re-fetching it
from memory.
Acked-by: Peter De Schrijver <[email protected]>
Tested-by: Peter Geis <[email protected]>
Tested-by: Jasper Korten <[email protected]>
Tested-by: David Heidelberg <[email protected]>
Tested-by: Nicolas Chauvet <[email protected]>
Acked-by: Daniel Lezcano <[email protected]>
Signed-off-by: Dmitry Osipenko <[email protected]>
Signed-off-by: Thierry Reding <[email protected]>
-rw-r--r-- | arch/arm/mach-tegra/cpuidle-tegra20.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/arm/mach-tegra/cpuidle-tegra20.c b/arch/arm/mach-tegra/cpuidle-tegra20.c index d6b9b4cf2635..97cae472b097 100644 --- a/arch/arm/mach-tegra/cpuidle-tegra20.c +++ b/arch/arm/mach-tegra/cpuidle-tegra20.c @@ -32,7 +32,7 @@ #include "sleep.h" #ifdef CONFIG_PM_SLEEP -static bool abort_flag; +static atomic_t abort_flag; static atomic_t abort_barrier; static int tegra20_idle_lp2_coupled(struct cpuidle_device *dev, struct cpuidle_driver *drv, @@ -171,13 +171,14 @@ static int tegra20_idle_lp2_coupled(struct cpuidle_device *dev, bool entered_lp2 = false; if (tegra_pending_sgi()) - WRITE_ONCE(abort_flag, true); + atomic_set(&abort_flag, 1); cpuidle_coupled_parallel_barrier(dev, &abort_barrier); - if (abort_flag) { + if (atomic_read(&abort_flag)) { cpuidle_coupled_parallel_barrier(dev, &abort_barrier); - abort_flag = false; /* clean flag for next coming */ + /* clean flag for next coming */ + atomic_set(&abort_flag, 0); return -EINTR; } |