Patch "ARCv2: smp-boot: wake_flag polling by non-Masters needs to be uncached" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
ARCv2: smp-boot: wake_flag polling by non-Masters needs to be uncached
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
arcv2-smp-boot-wake_flag-polling-by-non-masters-needs-to-be-uncached.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Jun 15 16:35:05 CEST 2017
From: Vineet Gupta <[email protected]>
Date: Tue, 21 Jun 2016 14:24:33 +0530
Subject: ARCv2: smp-boot: wake_flag polling by non-Masters needs to be uncached
From: Vineet Gupta <[email protected]>
[ Upstream commit 78f824d4312a8944f5340c6b161bba3bf2c81096 ]
This is needed on HS38 cores, for setting up IO-Coherency aperture properly
The polling could perturb the caches and coherecy fabric which could be wrong in the small window when Master is setting up IOC aperture etc in arc_cache_init()
We do it only for ARCv2 based builds to not affect EZChip ARCompact based platform.
--- arch/arc/kernel/smp.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-)
arch/arc/kernel/smp.c +16 -3
@@ -90,10 +90,23 @@ void __init smp_cpus_done(unsigned int m*/ static volatile int wake_flag; +#ifdef CONFIG_ISA_ARCOMPACT + +#define __boot_read (f) f +#define __boot_write (f, v) f = v + +#else + +#define __boot_read (f) arc_read_uncached_32(&f) +#define __boot_write (f, v) arc_write_uncached_32(&f, v) + +#endif +static void arc_default_smp_cpu_kick (int cpu,unsigned long pc) {BUG_ON (cpu ==0 ); - wake_flag = cpu; + +__boot_write (wake_flag, cpu); }void arc_platform_smp_wait_to_boot (int cpu)
@@ -102,10 +115,10 @@ void arc_platform_smp_wait_to_boot(int cif (IS_ENABLED (CONFIG_ARC_SMP_HALT_ON_RESET ))return ; -while (wake_flag != cpu) +while (__boot_read (wake_flag) != cpu) ; - wake_flag =0 ; +__boot_write (wake_flag,0 ); }const char *arc_platform_smp_cpuinfo (void )
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/arc-smp-boot-decouple-non-masters-waiting-api-from-jump-to-entry-point.patch queue-4.9/arcv2-smp-boot-wake_flag-polling-by-non-masters-needs-to-be-uncached.patch