[RFC PATCH 0/6] KVM: arm64: Errata management for VM Live migration
Shameer Kolothum
shameerali.kolothum.thodi at huawei.com
Fri Oct 11 00:50:47 PDT 2024
Hi,
On ARM64 platforms most of the errata workarounds are based on CPU
MIDR/REVIDR values and a number of these workarounds need to be
implemented by the Guest kernel as well. This creates a problem when
Guest needs to be migrated to a platform that differs in these
MIDR/REVIDR values even if the VMM can come up with a common minimum
feature list for the Guest using the recently introduced "Writable
ID registers" support.
(This is roughly based on a discussion I had with Marc and Oliver
at KVM forum. Marc outlined his idea for a solution and this is an
attempt to implement it. Thanks to both and I take all the blame
if this is nowhere near what is intended/required)
This RFC proposes a solution to handle the above issue by introducing
the following,
1. A new VM IOCTL,
KVM_ARM_SET_MIGRN_TARGET_CPUS _IOW(KVMIO, 0xb7, struct kvm_arm_migrn_cpus)
This can be used by the userspace(VMM) to set the target CPUs the
Guest will run in its lifetime. See patch #2
2. Add hypercall support for Guest kernel to retrieve any migration
errata bitmap(ARM_SMCCC_VENDOR_HYP_KVM_MIGRN_ERRATA)
The above will return the bitmaps in R0-R3 registers. See patch #4
3. The "capability" field in struct arm64_cpu_capabilities is a generated
one at present and may get renumbered or reordered. Hence, we can't use
this directly for migration errata bitmaps. Instead, introduced
"migartion_safe_cap", which has to be set statically for any
erratum that needs to be enabled and is safe for migration
purposes. See patches 3 & 6.
4. Rest of the patches includes the plumbing required to populate the
errata bitmap based on the target CPUs set by the VMM and update the
system_cap based on it.
ToDos:-
-We still need a way to handle the error in setting the invariant
registers(MIDR/REVIDR/AIDR) during Guest migration. Perhaps we can
handle it in userspace?
- Possibly we could do better to avoid the additional "migartion_safe_cap" use.
Suggestions welcome.
-There are errata that require more than MIDR/REVIDR, eg: CTR_EL0.
How to handle those?
-Check for locking requirements if any.
This is lightly tested on a HiSilicon ARM64 platform.
Please take a look and let me know your thoughts.
Thanks,
Shameer
Shameer Kolothum (6):
arm64: Modify callback matches() fn to take a target info
KVM: arm64: Add support for VMM to set migration target
KVM: arm64: Introduce a helper to retrieve errata
KVM: arm64: Add hypercall support for retrieving migration errata
bitmap
arm64: Use hypercall to check for any migration related errata
arm64: errata: Set migration_safe_cap for MIDR based errata
arch/arm64/include/asm/cpu_migrn_errata.h | 42 +++++++
arch/arm64/include/asm/cpufeature.h | 15 ++-
arch/arm64/include/asm/kvm_host.h | 3 +
arch/arm64/include/asm/paravirt.h | 4 +
arch/arm64/include/asm/spectre.h | 8 +-
arch/arm64/include/uapi/asm/kvm.h | 13 ++
arch/arm64/kernel/cpu_errata.c | 113 ++++++++++++++----
arch/arm64/kernel/cpufeature.c | 138 +++++++++++++++-------
arch/arm64/kernel/paravirt.c | 18 +++
arch/arm64/kernel/proton-pack.c | 13 +-
arch/arm64/kvm/arm.c | 38 ++++++
arch/arm64/kvm/hypercalls.c | 20 ++++
include/linux/arm-smccc.h | 8 +-
include/uapi/linux/kvm.h | 2 +
14 files changed, 361 insertions(+), 74 deletions(-)
create mode 100644 arch/arm64/include/asm/cpu_migrn_errata.h
--
2.45.2
More information about the linux-arm-kernel
mailing list