[RFC PATCH 0/2] Add PSCI v1.3 SYSTEM_OFF2 support for hibernation

David Woodhouse
2024-03-12T14:00:09Z

The upcoming PSCI v1.3 specification adds support for a SYSTEM_OFF2
function which is analogous to ACPI S4 state. This will allow hosting
environments to determine that a guest is hibernated rather than just
powered off, and ensure that they preserve the virtual environment
appropriately to allow the guest to resume safely (or bump the
hardware_signature in the FACS to trigger a clean reboot instead).

This adds support for it to KVM, and to the guest hibernate code.

Strictly, we should perhaps also allow the guest to detect PSCI v1.3,
but when v1.1 was added in commit 512865d83fd9 it was done
unconditionally, which seems wrong. Shouldn't we have a way for
userspace to control what gets exposed, rather than silently changing
the guest behaviour with newer host kernels? Should I add a
KVM_CAP_ARM_PSCI_VERSION?

For the guest side, this adds a new SYS_OFF_MODE_POWER_OFF with higher
priority than the EFI one, but which *only* triggers when there's a
hibernation in progress. That seemed like the simplest option, but see
the commit message for alternative possilities. I told Rafael I'd post a
straw man for bikeshedding, and here it is.

Documentation/virt/kvm/api.rst | 11 +++++++++++
arch/arm64/include/asm/kvm_host.h | 2 ++
arch/arm64/include/uapi/asm/kvm.h | 6 ++++++
arch/arm64/kvm/arm.c | 5 +++++
arch/arm64/kvm/hyp/nvhe/psci-relay.c | 2 ++
arch/arm64/kvm/psci.c | 37 ++++++++++++++++++++++++++++++++++++
drivers/firmware/psci/psci.c | 35 ++++++++++++++++++++++++++++++++++
include/uapi/linux/kvm.h | 1 +
include/uapi/linux/psci.h | 5 +++++
kernel/power/hibernate.c | 5 ++++-
10 files changed, 108 insertions(+), 1 deletion(-)