]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
6.1-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 26 Jun 2023 14:23:23 +0000 (16:23 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 26 Jun 2023 14:23:23 +0000 (16:23 +0200)
added patches:
kvm-arm64-restore-gicv2-on-gicv3-functionality.patch

queue-6.1/kvm-arm64-restore-gicv2-on-gicv3-functionality.patch [new file with mode: 0644]
queue-6.1/series

diff --git a/queue-6.1/kvm-arm64-restore-gicv2-on-gicv3-functionality.patch b/queue-6.1/kvm-arm64-restore-gicv2-on-gicv3-functionality.patch
new file mode 100644 (file)
index 0000000..5698440
--- /dev/null
@@ -0,0 +1,67 @@
+From 1caa71a7a600f7781ce05ef1e84701c459653663 Mon Sep 17 00:00:00 2001
+From: Marc Zyngier <maz@kernel.org>
+Date: Wed, 7 Jun 2023 15:38:44 +0100
+Subject: KVM: arm64: Restore GICv2-on-GICv3 functionality
+
+From: Marc Zyngier <maz@kernel.org>
+
+commit 1caa71a7a600f7781ce05ef1e84701c459653663 upstream.
+
+When reworking the vgic locking, the vgic distributor registration
+got simplified, which was a very good cleanup. But just a tad too
+radical, as we now register the *native* vgic only, ignoring the
+GICv2-on-GICv3 that allows pre-historic VMs (or so I thought)
+to run.
+
+As it turns out, QEMU still defaults to GICv2 in some cases, and
+this breaks Nathan's setup!
+
+Fix it by propagating the *requested* vgic type rather than the
+host's version.
+
+Fixes: 59112e9c390b ("KVM: arm64: vgic: Fix a circular locking issue")
+Reported-by: Nathan Chancellor <nathan@kernel.org>
+Tested-by: Nathan Chancellor <nathan@kernel.org>
+Signed-off-by: Marc Zyngier <maz@kernel.org>
+link: https://lore.kernel.org/r/20230606221525.GA2269598@dev-arch.thelio-3990X
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm64/kvm/vgic/vgic-init.c |   11 +++++++----
+ 1 file changed, 7 insertions(+), 4 deletions(-)
+
+--- a/arch/arm64/kvm/vgic/vgic-init.c
++++ b/arch/arm64/kvm/vgic/vgic-init.c
+@@ -446,6 +446,7 @@ int vgic_lazy_init(struct kvm *kvm)
+ int kvm_vgic_map_resources(struct kvm *kvm)
+ {
+       struct vgic_dist *dist = &kvm->arch.vgic;
++      enum vgic_type type;
+       gpa_t dist_base;
+       int ret = 0;
+@@ -460,10 +461,13 @@ int kvm_vgic_map_resources(struct kvm *k
+       if (!irqchip_in_kernel(kvm))
+               goto out;
+-      if (dist->vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2)
++      if (dist->vgic_model == KVM_DEV_TYPE_ARM_VGIC_V2) {
+               ret = vgic_v2_map_resources(kvm);
+-      else
++              type = VGIC_V2;
++      } else {
+               ret = vgic_v3_map_resources(kvm);
++              type = VGIC_V3;
++      }
+       if (ret) {
+               __kvm_vgic_destroy(kvm);
+@@ -473,8 +477,7 @@ int kvm_vgic_map_resources(struct kvm *k
+       dist_base = dist->vgic_dist_base;
+       mutex_unlock(&kvm->arch.config_lock);
+-      ret = vgic_register_dist_iodev(kvm, dist_base,
+-                                     kvm_vgic_global_state.type);
++      ret = vgic_register_dist_iodev(kvm, dist_base, type);
+       if (ret) {
+               kvm_err("Unable to register VGIC dist MMIO regions\n");
+               kvm_vgic_destroy(kvm);
index 31cad58a347bb4c7fe1dc2ec4ad44a53b8b8bbe5..38c121adcfd0c54b0c7c13f609e047abac9b3b87 100644 (file)
@@ -164,5 +164,6 @@ drm-exynos-fix-race-condition-uaf-in-exynos_g2d_exec.patch
 drm-radeon-fix-race-condition-uaf-in-radeon_gem_set_.patch
 vhost_vdpa-tell-vqs-about-the-negotiated.patch
 vhost_net-revert-upend_idx-only-on-retriable-error.patch
+kvm-arm64-restore-gicv2-on-gicv3-functionality.patch
 x86-apic-fix-kernel-panic-when-booting-with-intremap.patch
 i2c-imx-lpi2c-fix-type-char-overflow-issue-when-calc.patch