From 1f61d034c78336a08ddcd3a61502345837c80bd4 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 26 Jun 2023 16:23:23 +0200 Subject: [PATCH] 6.1-stable patches added patches: kvm-arm64-restore-gicv2-on-gicv3-functionality.patch --- ...restore-gicv2-on-gicv3-functionality.patch | 67 +++++++++++++++++++ queue-6.1/series | 1 + 2 files changed, 68 insertions(+) create mode 100644 queue-6.1/kvm-arm64-restore-gicv2-on-gicv3-functionality.patch 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 index 00000000000..56984405f78 --- /dev/null +++ b/queue-6.1/kvm-arm64-restore-gicv2-on-gicv3-functionality.patch @@ -0,0 +1,67 @@ +From 1caa71a7a600f7781ce05ef1e84701c459653663 Mon Sep 17 00:00:00 2001 +From: Marc Zyngier +Date: Wed, 7 Jun 2023 15:38:44 +0100 +Subject: KVM: arm64: Restore GICv2-on-GICv3 functionality + +From: Marc Zyngier + +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 +Tested-by: Nathan Chancellor +Signed-off-by: Marc Zyngier +link: https://lore.kernel.org/r/20230606221525.GA2269598@dev-arch.thelio-3990X +Signed-off-by: Greg Kroah-Hartman +--- + 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); diff --git a/queue-6.1/series b/queue-6.1/series index 31cad58a347..38c121adcfd 100644 --- a/queue-6.1/series +++ b/queue-6.1/series @@ -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 -- 2.47.3