• Thomas Gleixner's avatar
    cpu/hotplug: Allow "parallel" bringup up to CPUHP_BP_KICK_AP_STATE · 18415f33
    Thomas Gleixner authored
    There is often significant latency in the early stages of CPU bringup, and
    time is wasted by waking each CPU (e.g. with SIPI/INIT/INIT on x86) and
    then waiting for it to respond before moving on to the next.
    
    Allow a platform to enable parallel setup which brings all to be onlined
    CPUs up to the CPUHP_BP_KICK_AP state. While this state advancement on the
    control CPU (BP) is single-threaded the important part is the last state
    CPUHP_BP_KICK_AP which wakes the to be onlined CPUs up.
    
    This allows the CPUs to run up to the first sychronization point
    cpuhp_ap_sync_alive() where they wait for the control CPU to release them
    one by one for the full onlining procedure.
    
    This parallelism depends on the CPU hotplug core sync mechanism which
    ensures that the parallel brought up CPUs wait for release before touching
    any state which would make the CPU visible to anything outside the hotplug
    control mechanism.
    
    To handle the SMT constraints of X86 correctly the bringup happens in two
    iterations when CONFIG_HOTPLUG_SMT is enabled. The control CPU brings up
    the primary SMT threads of each core first, which can load the microcode
    without the need to rendevouz with the thread siblings. Once that's
    completed it brings up the secondary SMT threads.
    Co-developed-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
    Signed-off-by: default avatarDavid Woodhouse <dwmw@amazon.co.uk>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Tested-by: default avatarMichael Kelley <mikelley@microsoft.com>
    Tested-by: default avatarOleksandr Natalenko <oleksandr@natalenko.name>
    Tested-by: Helge Deller <deller@gmx.de> # parisc
    Tested-by: Guilherme G. Piccoli <gpiccoli@igalia.com> # Steam Deck
    Link: https://lore.kernel.org/r/20230512205257.240231377@linutronix.de
    18415f33
cpu.c 76.4 KB