I suggest to drop sync_r4k completely, because it is inaccurate. You can use IPI to synchronize count/compare instead, as Loongson-3 does.
Huacai On Mon, Aug 28, 2017 at 6:07 PM, Matija Glavinic Pecotic <matija.glavinic-pecotic....@nokia.com> wrote: > On 08/23/2017 10:21 AM, Matt Redfearn wrote: >> As noted in the commit message, upstream differs in this area. The >> hotplug code now waits on a completion event in bringup_wait_for_ap, >> which is set by the starting CPU in cpuhp_online_idle once it calls >> cpu_startup_entry. Thus there is no possibility of a race in upstream, >> and this commit has only re-introduced the deadlock condition, which can >> be observed on multiple platforms when running a heavy load test at the >> same time as hotplugging CPUs. See commit 8f46cca1e6c06 ("MIPS: SMP: Fix >> possibility of deadlock when bringing CPUs online") for details. > > I personally do not like the fact that synchronization is implicitly done by > the callers, it is the reason why the patch was proposed. As noted before, it > is enough someone checks cpu online mask somewhere in between and there is > race again. > > How about moving synchronise_count_slave before setting the cpu online? Is > there dependency it has to be done after completion? > > Regards, > > Matija >