From 3e616168bc1b7a14522b50849d71e619b94c0f7d Mon Sep 17 00:00:00 2001 From: Miroslav Rezanina Date: Tue, 1 Nov 2022 06:30:42 -0400 Subject: [PATCH] * Tue Nov 01 2022 Miroslav Rezanina - 7.1.0-4 - kvm-Revert-intel_iommu-Fix-irqchip-X2APIC-configuration-.patch [bz#2126095] - Resolves: bz#2126095 ([rhel9.2][intel_iommu]Booting guest with "-device intel-iommu,intremap=on,device-iotlb=on,caching-mode=on" causes kernel call trace) --- ...mu-Fix-irqchip-X2APIC-configuration-.patch | 84 +++++++++++++++++++ qemu-kvm.spec | 9 +- 2 files changed, 92 insertions(+), 1 deletion(-) create mode 100644 kvm-Revert-intel_iommu-Fix-irqchip-X2APIC-configuration-.patch diff --git a/kvm-Revert-intel_iommu-Fix-irqchip-X2APIC-configuration-.patch b/kvm-Revert-intel_iommu-Fix-irqchip-X2APIC-configuration-.patch new file mode 100644 index 0000000..99d2be9 --- /dev/null +++ b/kvm-Revert-intel_iommu-Fix-irqchip-X2APIC-configuration-.patch @@ -0,0 +1,84 @@ +From 7f5289f426b25cf1113a450a3aa311170ac30397 Mon Sep 17 00:00:00 2001 +From: Peter Xu +Date: Mon, 26 Sep 2022 11:32:06 -0400 +Subject: [PATCH] Revert "intel_iommu: Fix irqchip / X2APIC configuration + checks" + +RH-Author: Peter Xu +RH-MergeRequest: 121: Revert "intel_iommu: Fix irqchip / X2APIC configuration checks" +RH-Bugzilla: 2126095 +RH-Acked-by: Igor Mammedov +RH-Acked-by: Miroslav Rezanina +RH-Acked-by: Jason Wang +RH-Commit: [1/1] 6218c5f81c205ab160f4ccdb203ae39d4af3339e (peterx/qemu-kvm) + +It's true that when vcpus<=255 we don't require the length of 32bit APIC +IDs. However here since we already have EIM=ON it means the hypervisor +will declare the VM as x2apic supported (e.g. VT-d ECAP register will have +EIM bit 4 set), so the guest should assume the APIC IDs are 32bits width +even if vcpus<=255. In short, commit 77250171bdc breaks any simple cmdline +that wants to boot a VM with >=9 but <=255 vcpus with: + + -device intel-iommu,intremap=on + +For anyone who does not want to enable x2apic, we can use eim=off in the +intel-iommu parameters to skip enabling KVM x2apic. + +This partly reverts commit 77250171bdc02aee106083fd2a068147befa1a38, while +keeping the valid bit on checking split irqchip, but revert the other change. + +One thing to mention is that this patch may break migration compatibility +of such VM, however that's probably the best thing we can do, because the +old behavior was simply wrong and not working for >8 vcpus. For <=8 vcpus, +there could be a light guest ABI change (by enabling KVM x2apic after this +patch), but logically it shouldn't affect the migration from working. + +Also, this is not the 1st commit to change x2apic behavior. Igor provided +a full history of how this evolved for the past few years: + +https://lore.kernel.org/qemu-devel/20220922154617.57d1a1fb@redhat.com/ + +Relevant commits for reference: + + fb506e701e ("intel_iommu: reject broken EIM", 2016-10-17) + c1bb5418e3 ("target/i386: Support up to 32768 CPUs without IRQ remapping", 2020-12-10) + 77250171bd ("intel_iommu: Fix irqchip / X2APIC configuration checks", 2022-05-16) + dc89f32d92 ("target/i386: Fix sanity check on max APIC ID / X2APIC enablement", 2022-05-16) + +We may want to have this for stable too (mostly for 7.1.0 only). Adding a +fixes tag. + +Cc: David Woodhouse +Cc: Claudio Fontana +Cc: Igor Mammedov +Fixes: 77250171bd ("intel_iommu: Fix irqchip / X2APIC configuration checks") +Signed-off-by: Peter Xu +Message-Id: <20220926153206.10881-1-peterx@redhat.com> +Reviewed-by: Michael S. Tsirkin +Signed-off-by: Michael S. Tsirkin +Reviewed-by: Igor Mammedov +(cherry picked from commit 20ca47429e96df84e7b2e741f740bfce8a813fb2) +Signed-off-by: Peter Xu +--- + hw/i386/intel_iommu.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c +index 05d53a1aa9..6524c2ee32 100644 +--- a/hw/i386/intel_iommu.c ++++ b/hw/i386/intel_iommu.c +@@ -3818,6 +3818,11 @@ static bool vtd_decide_config(IntelIOMMUState *s, Error **errp) + error_setg(errp, "eim=on requires accel=kvm,kernel-irqchip=split"); + return false; + } ++ if (!kvm_enable_x2apic()) { ++ error_setg(errp, "eim=on requires support on the KVM side" ++ "(X2APIC_API, first shipped in v4.7)"); ++ return false; ++ } + } + + /* Currently only address widths supported are 39 and 48 bits */ +-- +2.31.1 + diff --git a/qemu-kvm.spec b/qemu-kvm.spec index 87c6f31..de9e909 100644 --- a/qemu-kvm.spec +++ b/qemu-kvm.spec @@ -151,7 +151,7 @@ Obsoletes: %{name}-block-ssh <= %{epoch}:%{version} \ Summary: QEMU is a machine emulator and virtualizer Name: qemu-kvm Version: 7.1.0 -Release: 3%{?rcrel}%{?dist}%{?cc_suffix} +Release: 4%{?rcrel}%{?dist}%{?cc_suffix} # Epoch because we pushed a qemu-1.0 package. AIUI this can't ever be dropped # Epoch 15 used for RHEL 8 # Epoch 17 used for RHEL 9 (due to release versioning offset in RHEL 8.5) @@ -249,6 +249,8 @@ Patch45: kvm-i386-do-kvm_put_msr_feature_control-first-thing-when.patch Patch46: kvm-Revert-Re-enable-capstone-internal-build.patch # For bz#2108531 - Windows guest reboot after migration with wsl2 installed inside Patch47: kvm-target-i386-kvm-fix-kvmclock_current_nsec-Assertion-.patch +# For bz#2126095 - [rhel9.2][intel_iommu]Booting guest with "-device intel-iommu,intremap=on,device-iotlb=on,caching-mode=on" causes kernel call trace +Patch48: kvm-Revert-intel_iommu-Fix-irqchip-X2APIC-configuration-.patch %if %{have_clang} BuildRequires: clang @@ -1281,6 +1283,11 @@ useradd -r -u 107 -g qemu -G kvm -d / -s /sbin/nologin \ %endif %changelog +* Tue Nov 01 2022 Miroslav Rezanina - 7.1.0-4 +- kvm-Revert-intel_iommu-Fix-irqchip-X2APIC-configuration-.patch [bz#2126095] +- Resolves: bz#2126095 + ([rhel9.2][intel_iommu]Booting guest with "-device intel-iommu,intremap=on,device-iotlb=on,caching-mode=on" causes kernel call trace) + * Thu Oct 13 2022 Jon Maloy - 7.1.0-3 - kvm-target-i386-kvm-fix-kvmclock_current_nsec-Assertion-.patch [bz#2108531] - Resolves: bz#2108531