On Tue, 10 Oct 2017 22:11:46 +1100
Michael Ellerman [off-list ref] wrote:
Nicholas Piggin [off-list ref] writes:
quoted
OPAL boot does not insert secondaries at 0x60 to wait at the secondary
hold spinloop. Instead it keeps them held in firmware until the
opal_start_cpu call is made, which directs them where the caller
specifies. Linux inserts them into generic_secondary_smp_init(), which
is after the secondary hold spinloop (they go on to spin at the per-CPU
paca loops, but that is another step).
So avoid waiting on this spinloop when booting with OPAL firmware.
It always just times out.
This saves 100ms boot time on bare metal, and 10s of seconds when
booting the simulator in SMP.
Oh nice, that's real facepalm territory.
It'd be neater if we just inserted them at 0x60, but the sequence is
wrong.
Can we fix it just by making spinning_secondaries zero on OPAL?
I had a look at that, but generic_secondary_smp_init() still
decrements it, so it would underflow which I thought was
uglier.
I actually have to look a bit further, because KVM guests are
also having the loop time out too by the looks.
Thanks,
Nick