On a Thursday in 2024, Michal Privoznik wrote:
This is a follow up of my previous commits. If the number of vCPUs exceeds some arbitrary value (255) then QEMU requires IOMMU with EIM and interemap enabled. But in turn, intremap IOMMU
s/interemap/intremap/
requires split I/O APIC (per virDomainDefIOMMUValidate()). Since after my previous commits (e.g. v10.10.0-rc1~183) IOMMU is added automagically, the I/O APIC can be also enabled automagically. Signed-off-by: Michal Privoznik <mprivozn@xxxxxxxxxx> --- src/qemu/qemu_postparse.c | 7 +++++++ tests/qemuxmlconfdata/intel-iommu-eim-autoadd.xml | 3 --- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_postparse.c b/src/qemu/qemu_postparse.c index 03b5ef825a..f48f172c37 100644 --- a/src/qemu/qemu_postparse.c +++ b/src/qemu/qemu_postparse.c @@ -1547,6 +1547,13 @@ qemuDomainDefEnableDefaultFeatures(virDomainDef *def, * capabilities, we still want to enable this */ def->features[VIR_DOMAIN_FEATURE_GIC] = VIR_TRISTATE_SWITCH_ON; } + + /* IOMMU with intremap requires split I/O APIC */
The error message in hw/i386/x86-iommu.c suggests otherwise: /* Both Intel and AMD IOMMU IR only support "kernel-irqchip={off|split}" */ if (x86_iommu_ir_supported(x86_iommu) && irq_all_kernel) { error_setg(errp, "Interrupt Remapping cannot work with " "kernel-irqchip=on, please use 'split|off'."); return; }
+ if (def->iommu && + def->iommu->intremap == VIR_TRISTATE_SWITCH_ON && + def->features[VIR_DOMAIN_FEATURE_IOAPIC] == VIR_DOMAIN_IOAPIC_NONE) { + def->features[VIR_DOMAIN_FEATURE_IOAPIC] = VIR_DOMAIN_IOAPIC_QEMU; + }
This should be only done if the IOMMU was auto-added, to not override it for user-specified IOMMU. (Sadly, this is one of those enums that does not distinguish between off and not specified) Jano
} diff --git a/tests/qemuxmlconfdata/intel-iommu-eim-autoadd.xml b/tests/qemuxmlconfdata/intel-iommu-eim-autoadd.xml index fa3aaf0d44..5abc40e566 100644 --- a/tests/qemuxmlconfdata/intel-iommu-eim-autoadd.xml +++ b/tests/qemuxmlconfdata/intel-iommu-eim-autoadd.xml @@ -8,9 +8,6 @@ <type arch='x86_64' machine='q35'>hvm</type> <boot dev='hd'/> </os> - <features> - <ioapic driver='qemu'/> - </features> <cpu mode='custom' match='exact' check='none'> <model fallback='forbid'>qemu64</model> </cpu> -- 2.45.2
Attachment:
signature.asc
Description: PGP signature