Fix some FD leaks in the code, code refactor and improvements as preparation for implementing hotplug support. Add domain capability to report if IOMMUFD is supported. Pavel Hrdina (24): qemu: Introduce QEMU_CAPS_OBJECT_IOMMUFD qemu: Move IOMMUFD validation to qemu_validate util: Move openning IOMMU device to viriommufd qemu_process: Refactor qemuProcessOpenIommuFd util: Move openning VFIO device to virpci qemu_process: Refactor qemuProcessOpenVfioDeviceFd util: Use virPCIDevice as argument in virPCIDeviceGetVfioPath conf: Introduce virHostdevIsPCIDeviceWithIOMMUFD conf: Introduce virDomainDefHasPCIHostdevWithIOMMUFD qemu_domain: Add missing IOMMUFD cleanup qemu_process: Fix FD leak with multiple host devices using IOMMUFD qemu_process: Refactor qemuProcessOpenVfioFds qemuxmlconftest: Refactor host device preparation qemuxmlconftest: Rename and refactor testSetupHostdevPrivateData qemuxmlconftest: Set fake FD for IOMMUFD qemu: Convert IOMMUFD to qemuFDPassDirect qemu: Convert vfioDeviceFd to qemuFDPassDirect qemu_command: Don't use host property if IOMMUFD is used qemu: Save IOMMUFD state into status XML qemu_hotplug: Remove iommufd object if no longer needed qemu_command: Extract building IOMMUFD props to function qemu_hotplug: Add support to hotplug host device with IOMMUFD conf: Introduce iommufd enum for domaincaps qemu: Fill iommufd domain capability docs/formatdomaincaps.rst | 7 ++ src/conf/domain_capabilities.c | 1 + src/conf/domain_capabilities.h | 1 + src/conf/domain_conf.c | 29 +++++ src/conf/domain_conf.h | 6 + src/libvirt_private.syms | 6 +- src/qemu/qemu_capabilities.c | 23 +++- src/qemu/qemu_capabilities.h | 1 + src/qemu/qemu_command.c | 86 ++++++-------- src/qemu/qemu_command.h | 3 + src/qemu/qemu_domain.c | 14 ++- src/qemu/qemu_domain.h | 5 +- src/qemu/qemu_hotplug.c | 47 ++++++++ src/qemu/qemu_process.c | 111 ++++++------------ src/qemu/qemu_process.h | 3 + src/qemu/qemu_validate.c | 15 +++ src/security/security_apparmor.c | 2 +- src/security/security_dac.c | 4 +- src/security/security_selinux.c | 4 +- src/util/viriommufd.c | 35 +++++- src/util/viriommufd.h | 4 +- src/util/virpci.c | 40 ++++++- src/util/virpci.h | 4 +- .../qemu_10.0.0-q35.x86_64+amdsev.xml | 4 + .../domaincapsdata/qemu_10.0.0-q35.x86_64.xml | 4 + .../qemu_10.0.0-tcg.x86_64+amdsev.xml | 4 + .../domaincapsdata/qemu_10.0.0-tcg.x86_64.xml | 4 + .../qemu_10.0.0-virt.aarch64.xml | 4 + tests/domaincapsdata/qemu_10.0.0.aarch64.xml | 4 + tests/domaincapsdata/qemu_10.0.0.ppc64.xml | 3 + tests/domaincapsdata/qemu_10.0.0.s390x.xml | 4 + .../qemu_10.0.0.x86_64+amdsev.xml | 4 + tests/domaincapsdata/qemu_10.0.0.x86_64.xml | 4 + .../qemu_10.1.0-q35.x86_64+inteltdx.xml | 4 + .../domaincapsdata/qemu_10.1.0-q35.x86_64.xml | 4 + .../qemu_10.1.0-tcg.x86_64+inteltdx.xml | 4 + .../domaincapsdata/qemu_10.1.0-tcg.x86_64.xml | 4 + tests/domaincapsdata/qemu_10.1.0.s390x.xml | 4 + .../qemu_10.1.0.x86_64+inteltdx.xml | 4 + tests/domaincapsdata/qemu_10.1.0.x86_64.xml | 4 + .../qemu_10.2.0-q35.x86_64+mshv.xml | 4 + .../domaincapsdata/qemu_10.2.0-q35.x86_64.xml | 4 + .../qemu_10.2.0-tcg.x86_64+mshv.xml | 4 + .../domaincapsdata/qemu_10.2.0-tcg.x86_64.xml | 4 + .../qemu_10.2.0-virt.aarch64.xml | 4 + tests/domaincapsdata/qemu_10.2.0.aarch64.xml | 4 + .../qemu_10.2.0.x86_64+mshv.xml | 4 + tests/domaincapsdata/qemu_10.2.0.x86_64.xml | 4 + .../domaincapsdata/qemu_11.0.0-q35.x86_64.xml | 4 + .../domaincapsdata/qemu_11.0.0-tcg.x86_64.xml | 4 + .../qemu_11.0.0-virt.aarch64.xml | 4 + tests/domaincapsdata/qemu_11.0.0.aarch64.xml | 4 + tests/domaincapsdata/qemu_11.0.0.x86_64.xml | 4 + .../domaincapsdata/qemu_6.2.0-q35.x86_64.xml | 3 + .../domaincapsdata/qemu_6.2.0-tcg.x86_64.xml | 3 + tests/domaincapsdata/qemu_6.2.0.ppc64.xml | 3 + tests/domaincapsdata/qemu_6.2.0.x86_64.xml | 3 + .../domaincapsdata/qemu_7.0.0-q35.x86_64.xml | 3 + .../domaincapsdata/qemu_7.0.0-tcg.x86_64.xml | 3 + tests/domaincapsdata/qemu_7.0.0.ppc64.xml | 3 + tests/domaincapsdata/qemu_7.0.0.x86_64.xml | 3 + .../domaincapsdata/qemu_7.1.0-q35.x86_64.xml | 3 + .../domaincapsdata/qemu_7.1.0-tcg.x86_64.xml | 3 + tests/domaincapsdata/qemu_7.1.0.ppc64.xml | 3 + tests/domaincapsdata/qemu_7.1.0.x86_64.xml | 3 + .../qemu_7.2.0-hvf.x86_64+hvf.xml | 3 + .../domaincapsdata/qemu_7.2.0-q35.x86_64.xml | 3 + .../qemu_7.2.0-tcg.x86_64+hvf.xml | 3 + .../domaincapsdata/qemu_7.2.0-tcg.x86_64.xml | 3 + tests/domaincapsdata/qemu_7.2.0.ppc.xml | 3 + tests/domaincapsdata/qemu_7.2.0.x86_64.xml | 3 + .../domaincapsdata/qemu_8.0.0-q35.x86_64.xml | 3 + .../domaincapsdata/qemu_8.0.0-tcg.x86_64.xml | 3 + tests/domaincapsdata/qemu_8.0.0.x86_64.xml | 3 + .../domaincapsdata/qemu_8.1.0-q35.x86_64.xml | 3 + .../domaincapsdata/qemu_8.1.0-tcg.x86_64.xml | 3 + tests/domaincapsdata/qemu_8.1.0.s390x.xml | 3 + tests/domaincapsdata/qemu_8.1.0.x86_64.xml | 3 + .../domaincapsdata/qemu_8.2.0-q35.x86_64.xml | 3 + .../qemu_8.2.0-tcg-virt.loongarch64.xml | 3 + .../domaincapsdata/qemu_8.2.0-tcg.x86_64.xml | 3 + .../qemu_8.2.0-virt.aarch64.xml | 3 + .../qemu_8.2.0-virt.loongarch64.xml | 3 + tests/domaincapsdata/qemu_8.2.0.aarch64.xml | 3 + tests/domaincapsdata/qemu_8.2.0.armv7l.xml | 3 + tests/domaincapsdata/qemu_8.2.0.s390x.xml | 3 + tests/domaincapsdata/qemu_8.2.0.x86_64.xml | 3 + .../domaincapsdata/qemu_9.0.0-q35.x86_64.xml | 4 + .../domaincapsdata/qemu_9.0.0-tcg.x86_64.xml | 4 + tests/domaincapsdata/qemu_9.0.0.sparc.xml | 3 + tests/domaincapsdata/qemu_9.0.0.x86_64.xml | 4 + .../domaincapsdata/qemu_9.1.0-q35.x86_64.xml | 4 + .../qemu_9.1.0-tcg-virt.riscv64.xml | 3 + .../domaincapsdata/qemu_9.1.0-tcg.x86_64.xml | 4 + .../qemu_9.1.0-virt.riscv64.xml | 3 + tests/domaincapsdata/qemu_9.1.0.s390x.xml | 4 + tests/domaincapsdata/qemu_9.1.0.x86_64.xml | 4 + .../qemu_9.2.0-hvf.aarch64+hvf.xml | 3 + .../qemu_9.2.0-q35.x86_64+amdsev.xml | 4 + .../domaincapsdata/qemu_9.2.0-q35.x86_64.xml | 4 + .../qemu_9.2.0-tcg.x86_64+amdsev.xml | 4 + .../domaincapsdata/qemu_9.2.0-tcg.x86_64.xml | 4 + tests/domaincapsdata/qemu_9.2.0.s390x.xml | 4 + .../qemu_9.2.0.x86_64+amdsev.xml | 4 + tests/domaincapsdata/qemu_9.2.0.x86_64.xml | 4 + tests/domaincapsmock.c | 17 ++- .../caps_10.0.0_aarch64.xml | 1 + .../caps_10.0.0_s390x.xml | 1 + .../caps_10.0.0_x86_64+amdsev.xml | 1 + .../caps_10.0.0_x86_64.xml | 1 + .../caps_10.1.0_s390x.xml | 1 + .../caps_10.1.0_x86_64+inteltdx.xml | 1 + .../caps_10.1.0_x86_64.xml | 1 + .../caps_10.2.0_aarch64.xml | 1 + .../caps_10.2.0_x86_64+mshv.xml | 1 + .../caps_10.2.0_x86_64.xml | 1 + .../caps_11.0.0_aarch64.xml | 1 + .../caps_11.0.0_x86_64.xml | 1 + .../caps_9.0.0_x86_64.xml | 1 + .../qemucapabilitiesdata/caps_9.1.0_s390x.xml | 1 + .../caps_9.1.0_x86_64.xml | 1 + .../qemucapabilitiesdata/caps_9.2.0_s390x.xml | 1 + .../caps_9.2.0_x86_64+amdsev.xml | 1 + .../caps_9.2.0_x86_64.xml | 1 + .../iommufd-q35.x86_64-latest.args | 4 +- ...fd-virt-pci-bus-single.aarch64-latest.args | 4 +- .../iommufd-virt.aarch64-latest.args | 6 +- .../iommufd.x86_64-latest.args | 4 +- tests/qemuxmlconftest.c | 100 +++++++++------- 129 files changed, 694 insertions(+), 199 deletions(-) -- 2.53.0