• Mark Rutland's avatar
    arm64: move sp_el0 and tpidr_el1 into cpu_suspend_ctx · 623b476f
    Mark Rutland authored
    When returning from idle, we rely on the fact that thread_info lives at
    the end of the kernel stack, and restore this by masking the saved stack
    pointer. Subsequent patches will sever the relationship between the
    stack and thread_info, and to cater for this we must save/restore sp_el0
    explicitly, storing it in cpu_suspend_ctx.
    
    As cpu_suspend_ctx must be doubleword aligned, this leaves us with an
    extra slot in cpu_suspend_ctx. We can use this to save/restore tpidr_el1
    in the same way, which simplifies the code, avoiding pointer chasing on
    the restore path (as we no longer need to load thread_info::cpu followed
    by the relevant slot in __per_cpu_offset based on this).
    
    This patch stashes both registers in cpu_suspend_ctx.
    Signed-off-by: default avatarMark Rutland <mark.rutland@arm.com>
    Tested-by: default avatarLaura Abbott <labbott@redhat.com>
    Cc: James Morse <james.morse@arm.com>
    Cc: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Cc: Will Deacon <will.deacon@arm.com>
    Signed-off-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    623b476f
suspend.c 3.54 KB