Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

KVM: arm64: Add support for PSCI v1.2 and v1.3

As with PSCI v1.1 in commit 512865d83fd9 ("KVM: arm64: Bump guest PSCI
version to 1.1"), expose v1.3 to the guest by default. The SYSTEM_OFF2
call which is exposed by doing so is compatible for userspace because
it's just a new flag in the event that KVM raises, in precisely the same
way that SYSTEM_RESET2 was compatible when v1.1 was enabled by default.

Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Reviewed-by: Miguel Luis <miguel.luis@oracle.com>
Link: https://lore.kernel.org/r/20241019172459.2241939-4-dwmw2@infradead.org
Signed-off-by: Oliver Upton <oliver.upton@linux.dev>

authored by

David Woodhouse and committed by
Oliver Upton
8be82d53 97413cea

+10 -2
+2
arch/arm64/kvm/hypercalls.c
··· 575 575 case KVM_ARM_PSCI_0_2: 576 576 case KVM_ARM_PSCI_1_0: 577 577 case KVM_ARM_PSCI_1_1: 578 + case KVM_ARM_PSCI_1_2: 579 + case KVM_ARM_PSCI_1_3: 578 580 if (!wants_02) 579 581 return -EINVAL; 580 582 vcpu->kvm->arch.psci_version = val;
+5 -1
arch/arm64/kvm/psci.c
··· 328 328 329 329 switch(psci_fn) { 330 330 case PSCI_0_2_FN_PSCI_VERSION: 331 - val = minor == 0 ? KVM_ARM_PSCI_1_0 : KVM_ARM_PSCI_1_1; 331 + val = PSCI_VERSION(1, minor); 332 332 break; 333 333 case PSCI_1_0_FN_PSCI_FEATURES: 334 334 arg = smccc_get_arg1(vcpu); ··· 487 487 } 488 488 489 489 switch (version) { 490 + case KVM_ARM_PSCI_1_3: 491 + return kvm_psci_1_x_call(vcpu, 3); 492 + case KVM_ARM_PSCI_1_2: 493 + return kvm_psci_1_x_call(vcpu, 2); 490 494 case KVM_ARM_PSCI_1_1: 491 495 return kvm_psci_1_x_call(vcpu, 1); 492 496 case KVM_ARM_PSCI_1_0:
+3 -1
include/kvm/arm_psci.h
··· 14 14 #define KVM_ARM_PSCI_0_2 PSCI_VERSION(0, 2) 15 15 #define KVM_ARM_PSCI_1_0 PSCI_VERSION(1, 0) 16 16 #define KVM_ARM_PSCI_1_1 PSCI_VERSION(1, 1) 17 + #define KVM_ARM_PSCI_1_2 PSCI_VERSION(1, 2) 18 + #define KVM_ARM_PSCI_1_3 PSCI_VERSION(1, 3) 17 19 18 - #define KVM_ARM_PSCI_LATEST KVM_ARM_PSCI_1_1 20 + #define KVM_ARM_PSCI_LATEST KVM_ARM_PSCI_1_3 19 21 20 22 static inline int kvm_psci_version(struct kvm_vcpu *vcpu) 21 23 {