Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

MIPS: SMP: Move the AP sync point before the non-parallel aware functions

When CONFIG_HOTPLUG_PARALLEL is enabled, the code executing before
cpuhp_ap_sync_alive() is executed in parallel, while after it is
serialized. The functions set_cpu_sibling_map() and set_cpu_core_map()
were not designed to be executed in parallel, so by moving the
cpuhp_ap_sync_alive() before cpuhp_ap_sync_alive(), we then ensure
they will be called serialized.

The measurement done on EyeQ5 did not show any relevant boot time
increase after applying this patch.

Fixes: 76c43eb507bc ("MIPS: SMP: Implement parallel CPU bring up for EyeQ")
Reported-by: Huacai Chen <chenhuacai@kernel.org>
Signed-off-by: Gregory CLEMENT <gregory.clement@bootlin.com>
Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>

authored by

Gregory CLEMENT and committed by
Thomas Bogendoerfer
4cc7543e 3b370426

+3 -3
+3 -3
arch/mips/kernel/smp.c
··· 374 374 calibrate_delay(); 375 375 cpu_data[cpu].udelay_val = loops_per_jiffy; 376 376 377 + #ifdef CONFIG_HOTPLUG_PARALLEL 378 + cpuhp_ap_sync_alive(); 379 + #endif 377 380 set_cpu_sibling_map(cpu); 378 381 set_cpu_core_map(cpu); 379 382 380 383 cpumask_set_cpu(cpu, &cpu_coherent_mask); 381 - #ifdef CONFIG_HOTPLUG_PARALLEL 382 - cpuhp_ap_sync_alive(); 383 - #endif 384 384 notify_cpu_starting(cpu); 385 385 386 386 #ifndef CONFIG_HOTPLUG_PARALLEL