• Oliver Upton's avatar
    KVM: arm64: Implement PSCI SYSTEM_SUSPEND · bfbab445
    Oliver Upton authored
    ARM DEN0022D.b 5.19 "SYSTEM_SUSPEND" describes a PSCI call that allows
    software to request that a system be placed in the deepest possible
    low-power state. Effectively, software can use this to suspend itself to
    RAM.
    
    Unfortunately, there really is no good way to implement a system-wide
    PSCI call in KVM. Any precondition checks done in the kernel will need
    to be repeated by userspace since there is no good way to protect a
    critical section that spans an exit to userspace. SYSTEM_RESET and
    SYSTEM_OFF are equally plagued by this issue, although no users have
    seemingly cared for the relatively long time these calls have been
    supported.
    
    The solution is to just make the whole implementation userspace's
    problem. Introduce a new system event, KVM_SYSTEM_EVENT_SUSPEND, that
    indicates to userspace a calling vCPU has invoked PSCI SYSTEM_SUSPEND.
    Additionally, add a CAP to get buy-in from userspace for this new exit
    type.
    
    Only advertise the SYSTEM_SUSPEND PSCI call if userspace has opted in.
    If a vCPU calls SYSTEM_SUSPEND, punt straight to userspace. Provide
    explicit documentation of userspace's responsibilites for the exit and
    point to the PSCI specification to describe the actual PSCI call.
    Reviewed-by: default avatarReiji Watanabe <reijiw@google.com>
    Signed-off-by: default avatarOliver Upton <oupton@google.com>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20220504032446.4133305-8-oupton@google.com
    bfbab445
kvm_host.h 26.4 KB