All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v5 0/2] KVM: arm64: mixed-width check should be skipped for uninitialized vCPUs
@ 2022-03-21  5:08 ` Reiji Watanabe
  0 siblings, 0 replies; 18+ messages in thread
From: Reiji Watanabe @ 2022-03-21  5:08 UTC (permalink / raw)
  To: Marc Zyngier, kvmarm
  Cc: kvm, linux-arm-kernel, James Morse, Alexandru Elisei,
	Suzuki K Poulose, Andrew Jones, Paolo Bonzini, Will Deacon,
	Peter Shier, Ricardo Koller, Oliver Upton, Jing Zhang,
	Raghavendra Rao Anata, Reiji Watanabe

KVM allows userspace to configure either all EL1 32bit or 64bit vCPUs
for a guest.  At vCPU reset, vcpu_allowed_register_width() checks
if the vcpu's register width is consistent with all other vCPUs'.
Since the checking is done even against vCPUs that are not initialized
(KVM_ARM_VCPU_INIT has not been done) yet, the uninitialized vCPUs
are erroneously treated as 64bit vCPU, which causes the function to
incorrectly detect a mixed-width VM.

This series will fix this problem by introducing a new VM flag that
indicates the guest needs to be configured with all 32bit or 64bit
vCPUs and checking vcpu's register width against the new flag at
the vcpu's KVM_ARM_VCPU_INIT (instead of against other vCPUs'
register width).

Patch-1 introduces KVM_ARCH_FLAG_EL1_32BIT and
KVM_ARCH_FLAG_REG_WIDTH_CONFIGURED bits for kvm->arch.flags and
uses them to check vcpu's register width to fix the problem.

Patch-2 introduces a selftest that can test non-mixed-width vCPUs (all
64bit vCPUs or all 32bit vcPUs) can be configured, and mixed-width
vCPUs cannot be configured.

The series is based on kvmarm/next's at tag: kvmarm-5.18.

v5:
  - Rebase to kvmarm/next (and drop the patch-1 "KVM: arm64: Generalise
    VM features into a set of flags")
  - Use kernel-doc style comments for kvm_set_vm_width() [Oliver]
  - Change kvm_set_vm_width() to use if/else instead of a ternary
    operator for KVM_ARCH_FLAG_EL1_32BIT check [Oliver]

v4: https://lore.kernel.org/all/20220314061959.3349716-1-reijiw@google.com/
  - Use different implementation of vcpu_el1_is_32bit() depending on
    the context. [Marc]
  - Rename kvm_register_width_check_or_init() to kvm_set_vm_width(), and
    call it from kvm_rest_vcpu() instead of from kvm_vcpu_set_target()
  - Remove vcpu_allowed_register_width(), and does the same checking
    in kvm_set_vm_width() instead.

v3: https://lore.kernel.org/all/20220303035408.3708241-1-reijiw@google.com/
  - Introduced 'flags' to kvm_arch, and use bits of the flags for
    a set of booleans for VM feature.
  - Changed 'el1_reg_width' to two bits of 'flags' of kvm_arch.

v2: https://lore.kernel.org/all/20220118041923.3384602-1-reijiw@google.com/
  - Introduced 'el1_reg_width' for kvm_arch and use it to check vcpu's
    register width against the flag at the vcpu's KVM_ARM_VCPU_INIT.

v1: https://lore.kernel.org/all/20220110054042.1079932-1-reijiw@google.com/

[1] https://lore.kernel.org/all/20210715163159.1480168-2-maz@kernel.org/

Reiji Watanabe (2):
  KVM: arm64: mixed-width check should be skipped for uninitialized
    vCPUs
  KVM: arm64: selftests: Introduce vcpu_width_config

 arch/arm64/include/asm/kvm_emulate.h          |  27 ++--
 arch/arm64/include/asm/kvm_host.h             |  10 ++
 arch/arm64/kvm/reset.c                        |  65 ++++++---
 tools/testing/selftests/kvm/.gitignore        |   1 +
 tools/testing/selftests/kvm/Makefile          |   1 +
 .../selftests/kvm/aarch64/vcpu_width_config.c | 125 ++++++++++++++++++
 6 files changed, 199 insertions(+), 30 deletions(-)
 create mode 100644 tools/testing/selftests/kvm/aarch64/vcpu_width_config.c

-- 
2.35.1.894.gb6a874cedc-goog


^ permalink raw reply	[flat|nested] 18+ messages in thread

end of thread, other threads:[~2022-03-22  3:32 UTC | newest]

Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-21  5:08 [PATCH v5 0/2] KVM: arm64: mixed-width check should be skipped for uninitialized vCPUs Reiji Watanabe
2022-03-21  5:08 ` Reiji Watanabe
2022-03-21  5:08 ` Reiji Watanabe
2022-03-21  5:08 ` [PATCH v5 1/2] " Reiji Watanabe
2022-03-21  5:08   ` Reiji Watanabe
2022-03-21  5:08   ` Reiji Watanabe
2022-03-21  5:08 ` [PATCH v5 2/2] KVM: arm64: selftests: Introduce vcpu_width_config Reiji Watanabe
2022-03-21  5:08   ` Reiji Watanabe
2022-03-21  5:08   ` Reiji Watanabe
2022-03-21  6:17   ` Oliver Upton
2022-03-21  6:17     ` Oliver Upton
2022-03-21  6:17     ` Oliver Upton
2022-03-21  8:28     ` Oliver Upton
2022-03-21  8:28       ` Oliver Upton
2022-03-21  8:28       ` Oliver Upton
2022-03-22  3:30     ` Reiji Watanabe
2022-03-22  3:30       ` Reiji Watanabe
2022-03-22  3:30       ` Reiji Watanabe

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.