diff options
author | Soren Brinkmann <soren.brinkmann@xilinx.com> | 2014-09-02 14:19:12 -0700 |
---|---|---|
committer | Michal Simek <michal.simek@xilinx.com> | 2014-09-16 12:55:09 +0200 |
commit | 50c7960a4517d6c93226351cd8c43c86f104c919 (patch) | |
tree | 354342e21f9dfc23fe2d0412f4df7dc3301e928e /arch/arm/mach-zynq/platsmp.c | |
parent | 18aebf116b494101841f109f07e0d6a0aad9a46e (diff) |
ARM: zynq: Synchronise zynq_cpu_die/kill
Avoid races and add synchronisation between the arch specific
kill and die routines.
The same synchronisation issue was fixed on IMX platform
by this commit:
"ARM: imx: fix sync issue between imx_cpu_die and imx_cpu_kill"
(sha1: 2f3edfd7e27ad4206acbc2ae99c9df5f46353024)
Signed-off-by: Soren Brinkmann <soren.brinkmann@xilinx.com>
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Diffstat (limited to 'arch/arm/mach-zynq/platsmp.c')
-rw-r--r-- | arch/arm/mach-zynq/platsmp.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/arch/arm/mach-zynq/platsmp.c b/arch/arm/mach-zynq/platsmp.c index 6c7843108c7f..06415eeba7e6 100644 --- a/arch/arm/mach-zynq/platsmp.c +++ b/arch/arm/mach-zynq/platsmp.c @@ -127,6 +127,12 @@ static void zynq_secondary_init(unsigned int cpu) #ifdef CONFIG_HOTPLUG_CPU static int zynq_cpu_kill(unsigned cpu) { + unsigned long timeout = jiffies + msecs_to_jiffies(50); + + while (zynq_slcr_cpu_state_read(cpu)) + if (time_after(jiffies, timeout)) + return 0; + zynq_slcr_cpu_stop(cpu); return 1; } |