@@ -1652,13 +1652,8 @@ static void amdvi_sysbus_realize(DeviceState *dev, Error **errp)
memory_region_add_subregion_overlap(&s->mr_sys, AMDVI_INT_ADDR_FIRST,
&s->mr_ir, 1);
- /* AMD IOMMU with x2APIC mode requires xtsup=on */
- if (x86ms->apic_id_limit > 255 && !s->xtsup) {
- error_report("AMD IOMMU with x2APIC confguration requires xtsup=on");
- exit(EXIT_FAILURE);
- }
- if (s->xtsup && kvm_irqchip_is_split() && !kvm_enable_x2apic()) {
- error_report("AMD IOMMU xtsup=on requires support on the KVM side");
+ if (kvm_enabled() && x86ms->apic_id_limit > 255 && !s->xtsup) {
+ error_report("AMD IOMMU with x2APIC configuration requires xtsup=on");
exit(EXIT_FAILURE);
}
When building with debug on a host which doesn't provide KVM, we get: C compiler for the host machine: clang (clang 16.0.0 "Apple clang version 16.0.0 (clang-1600.0.26.4)") C linker for the host machine: clang ld64 1115.7.3 Host machine cpu family: aarch64 Host machine cpu: aarch64 Compilation host CPU : aarch64 host endianness : little C compiler : clang Host C compiler : clang C++ compiler : NO Objective-C compiler : clang Rust support : NO CFLAGS : -g -O0 User defined options optimization : 0 ... [1589/1590] Linking target qemu-system-x86_64-unsigned Undefined symbols for architecture arm64: "_kvm_enable_x2apic", referenced from: _amdvi_sysbus_realize in hw_i386_amd_iommu.c.o ld: symbol(s) not found for architecture arm64 In commit 9926cf34de5 ("target/i386: Allow elision of kvm_enable_x2apic()") we removed this symbol stub globally (debug and optimized build profiles). All code wanted to access it must be protected by a check on kvm_enabled(). See the similar check in x86_cpus_init() added by commit c04cfb4596a ("hw/i386: fix short-circuit logic with non-optimizing builds"). In order to fix this linking error, protect the whole block checking the XTSup feature with a check on whether KVM is enabled. Since x86_cpus_init() already checks APIC ID > 255 imply kernel support for irqchip and X2APIC, remove the confuse and unlikely reachable "AMD IOMMU xtsup=on requires support on the KVM side" message. Fix a type in "configuration" in error message. Fixes: b12cb3819baf (amd_iommu: Check APIC ID > 255 for XTSup) Reported-by: Phil Dennis-Jordan <phil@philjordan.eu> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> --- Alternative fix to: - https://lore.kernel.org/qemu-devel/20241113144923.41225-1-phil@philjordan.eu/ - https://lore.kernel.org/qemu-devel/20241114114509.15350-1-sarunkod@amd.com/ --- hw/i386/amd_iommu.c | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-)