| KVM implements the PSCI (Power State Coordination Interface) |
| specification in order to provide services such as CPU on/off, reset |
| and power-off to the guest. |
| |
| The PSCI specification is regularly updated to provide new features, |
| and KVM implements these updates if they make sense from a virtualization |
| point of view. |
| |
| This means that a guest booted on two different versions of KVM can |
| observe two different "firmware" revisions. This could cause issues if |
| a given guest is tied to a particular PSCI revision (unlikely), or if |
| a migration causes a different PSCI version to be exposed out of the |
| blue to an unsuspecting guest. |
| |
| In order to remedy this situation, KVM exposes a set of "firmware |
| pseudo-registers" that can be manipulated using the GET/SET_ONE_REG |
| interface. These registers can be saved/restored by userspace, and set |
| to a convenient value if required. |
| |
| The following register is defined: |
| |
| * KVM_REG_ARM_PSCI_VERSION: |
| |
| - Only valid if the vcpu has the KVM_ARM_VCPU_PSCI_0_2 feature set |
| (and thus has already been initialized) |
| - Returns the current PSCI version on GET_ONE_REG (defaulting to the |
| highest PSCI version implemented by KVM and compatible with v0.2) |
| - Allows any PSCI version implemented by KVM and compatible with |
| v0.2 to be set with SET_ONE_REG |
| - Affects the whole VM (even if the register view is per-vcpu) |