Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 73053d9

Browse files
Rob Herringolofj
authored andcommitted
ARM: highbank: fix cache flush ordering for cpu hotplug
The L1 data cache flush needs to be after highbank_set_cpu_jump call which pollutes the cache with the l2x0_lock. This causes other cores to deadlock waiting for the l2x0_lock. Moving the flush of the entire data cache after highbank_set_cpu_jump fixes the problem. Use flush_cache_louis instead of flush_cache_all are that is sufficient to flush only the L1 data cache. flush_cache_louis did not exist when highbank_cpu_die was originally written. With PL310 errata 769419 enabled, a wmb is inserted into idle which takes the l2x0_lock. This makes the problem much more easily hit and causes reset to hang. Reported-by: Paolo Pisati <[email protected]> Signed-off-by: Rob Herring <[email protected]> Signed-off-by: Olof Johansson <[email protected]>
1 parent 71bd98a commit 73053d9

File tree

1 file changed

+4
-6
lines changed

1 file changed

+4
-6
lines changed

arch/arm/mach-highbank/hotplug.c

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,13 +28,11 @@ extern void secondary_startup(void);
2828
*/
2929
void __ref highbank_cpu_die(unsigned int cpu)
3030
{
31-
flush_cache_all();
32-
3331
highbank_set_cpu_jump(cpu, phys_to_virt(0));
34-
highbank_set_core_pwr();
3532

36-
cpu_do_idle();
33+
flush_cache_louis();
34+
highbank_set_core_pwr();
3735

38-
/* We should never return from idle */
39-
panic("highbank: cpu %d unexpectedly exit from shutdown\n", cpu);
36+
while (1)
37+
cpu_do_idle();
4038
}

0 commit comments

Comments
 (0)