[PATCH v8 0/8] KVM: arm64: Add idempotent controls to migrate guest counter
Alexandru Elisei
alexandru.elisei at arm.com
Wed Sep 22 08:27:52 PDT 2021
Hi Oliver,
This looks interesting, I am going to try to do my best to review the series. I
haven't followed the patches until this version, so I might be missing part of the
context when I post my comments.
Thanks,
Alex
On 9/16/21 19:15, Oliver Upton wrote:
> Currently, on KVM/arm64, we only allow a VMM to migrate the guest's
> virtual counter by-value. Saving and restoring the counter by value is
> problematic in the fact that the recorded state is not idempotent.
> Furthermore, we obfuscate from userspace the fact that the architecture
> actually provides offset-based controls.
>
> Another issue is that KVM/arm64 doesn't provide userspace with the
> controls of the physical counter-timer. This series aims to address both
> issues by adding offset-based controls for the virtual and physical
> counters.
>
> Patches 1-2 are refactor changes required to provide offset controls to
> userspace and putting in some generic plumbing to use for both physical
> and virtual offsets.
>
> Patch 3 is a minor refactor, creating a helper function to get the
> number of timer registers for a particular vCPU.
>
> Patch 4 exposes a vCPU's virtual offset through the KVM_*_ONE_REG
> ioctls. When NV support is added to KVM, CNTVOFF_EL2 will be considered
> a guest system register. So, it is safe to expose it now through that
> ioctl.
>
> Patch 5 adds a cpufeature bit to detect 'full' ECV implementations,
> providing EL2 with the ability to offset the physical counter-timer.
>
> Patch 6 exposes a vCPU's physical offset as a vCPU device attribute.
> This is deliberate, as the attribute is not architectural; KVM uses this
> attribute to track the host<->guest offset.
>
> Patch 7 is a prepatory change for the sake of physical offset emulation,
> as counter-timer traps must be configured separately for each vCPU.
>
> Patch 8 allows non-ECV hosts to support the physical offset vCPU device
> attribute, by trapping and emulating the physical counter registers.
>
> This series was tested on an Ampere Mt. Jade system (non-ECV, VHE and
> nVHE). I did not test this on the FVP, as I need to really figure out
> tooling for it on my workstation.
>
> Applies cleanly to v5.15-rc1
>
> v7: http://lore.kernel.org/r/20210816001217.3063400-1-oupton@google.com
>
> v7 -> v8:
> - Only use ECV if !VHE
> - Only expose CNTVOFF_EL2 register to userspace with opt-in
> - Refer to the direct_ptimer explicitly
>
> Oliver Upton (8):
> KVM: arm64: Refactor update_vtimer_cntvoff()
> KVM: arm64: Separate guest/host counter offset values
> KVM: arm64: Make a helper function to get nr of timer regs
> KVM: arm64: Allow userspace to configure a vCPU's virtual offset
> arm64: cpufeature: Enumerate support for FEAT_ECV >= 0x2
> KVM: arm64: Allow userspace to configure a guest's counter-timer
> offset
> KVM: arm64: Configure timer traps in vcpu_load() for VHE
> KVM: arm64: Emulate physical counter offsetting on non-ECV systems
>
> Documentation/arm64/booting.rst | 7 +
> Documentation/virt/kvm/api.rst | 23 +++
> Documentation/virt/kvm/devices/vcpu.rst | 28 ++++
> arch/arm64/include/asm/kvm_host.h | 3 +
> arch/arm64/include/asm/sysreg.h | 5 +
> arch/arm64/include/uapi/asm/kvm.h | 2 +
> arch/arm64/kernel/cpufeature.c | 10 ++
> arch/arm64/kvm/arch_timer.c | 196 +++++++++++++++++++++---
> arch/arm64/kvm/arm.c | 9 +-
> arch/arm64/kvm/guest.c | 28 +++-
> arch/arm64/kvm/hyp/include/hyp/switch.h | 32 ++++
> arch/arm64/kvm/hyp/nvhe/timer-sr.c | 11 +-
> arch/arm64/tools/cpucaps | 1 +
> include/clocksource/arm_arch_timer.h | 1 +
> include/kvm/arm_arch_timer.h | 14 +-
> include/uapi/linux/kvm.h | 1 +
> 16 files changed, 337 insertions(+), 34 deletions(-)
>
More information about the linux-arm-kernel
mailing list