• James Morse's avatar
    arm64: hibernate: Resume when hibernate image created on non-boot CPU · 8ec058fd
    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 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 CPU. This complicates
    hibernate/resume as now we can't trust the CPU numbers.
    
    We currently forbid hibernate if CPU0 has been hotplugged out to avoid
    this situation without kexec.
    
    Save the MPIDR of the CPU we hibernated on in the hibernate arch-header,
    use hibernate_resume_nonboot_cpu_disable() to direct which CPU we should
    resume on based on the MPIDR of the CPU we hibernated on. This allows us to
    hibernate/resume on any CPU, even if the logical numbers have been
    shuffled by kexec.
    Signed-off-by: default avatarJames Morse <james.morse@arm.com>
    Cc: Mark Rutland <mark.rutland@arm.com>
    Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Reviewed-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Signed-off-by: default avatarWill Deacon <will.deacon@arm.com>
    8ec058fd
hibernate.c 14.9 KB