Commit f0c69bdf authored by Dmitry Osipenko's avatar Dmitry Osipenko Committed by Thierry Reding
Browse files

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: default avatarPeter De Schrijver <pdeschrijver@nvidia.com>
Tested-by: default avatarPeter Geis <pgwipeout@gmail.com>
Tested-by: default avatarJasper Korten <jja2000@gmail.com>
Tested-by: default avatarDavid Heidelberg <david@ixit.cz>
Tested-by: default avatarNicolas Chauvet <kwizart@gmail.com>
Acked-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Signed-off-by: default avatarDmitry Osipenko <digetx@gmail.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
parent 51da5f1c
Loading
Loading
Loading
Loading
+5 −4
Original line number Diff line number Diff line
@@ -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;
	}