Message ID | 20200212235134.12638-11-digetx@gmail.com (mailing list archive) |
---|---|
State | Not Applicable, archived |
Headers | show |
Series | Consolidate and improve NVIDIA Tegra CPUIDLE driver(s) | expand |
On Thu, Feb 13, 2020 at 02:51:27AM +0300, Dmitry Osipenko wrote: > 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 <pdeschrijver@nvidia.com> > Tested-by: Peter Geis <pgwipeout@gmail.com> > Tested-by: Jasper Korten <jja2000@gmail.com> > Tested-by: David Heidelberg <david@ixit.cz> > Signed-off-by: Dmitry Osipenko <digetx@gmail.com> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
diff --git a/arch/arm/mach-tegra/cpuidle-tegra20.c b/arch/arm/mach-tegra/cpuidle-tegra20.c index bcc158b72e67..ccb8b0aa6c46 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, @@ -168,13 +168,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; }