• James Morse's avatar
    cpu/hotplug: Allow suspend/resume CPU to be specified · d391e552
    James Morse authored
    disable_nonboot_cpus() assumes that the lowest numbered online CPU is
    the boot CPU, and that this is the correct CPU to run any power
    management code on.
    
    On x86 this is always correct, as CPU0 cannot (easily) by taken offline.
    
    On arm64 CPU0 can be taken offline. For hibernate/resume this means we
    may hibernate on a CPU other than CPU0. If the system is rebooted with
    kexec 'CPU0' will be assigned to a different physical CPU. This
    complicates hibernate/resume as now we can't trust the CPU numbers.
    Arch code can find the correct physical CPU, and ensure it is online
    before resume from hibernate begins, but also needs to influence
    disable_nonboot_cpus()s choice of CPU.
    
    Rename disable_nonboot_cpus() as freeze_secondary_cpus() and add an
    argument indicating which CPU should be left standing. Follow the logic
    in migrate_to_reboot_cpu() to use the lowest numbered online CPU if the
    requested CPU is not online.
    Add disable_nonboot_cpus() as an inline function that has the existing
    behaviour.
    
    Cc: Rafael J. Wysocki <rjw@rjwysocki.net>
    Reviewed-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    d391e552
cpu.c 43 KB