[libvirt PATCH 00/24] IOMMUFD fixes and hotplug support

Pavel Hrdina via Devel posted 24 patches 2 weeks ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/libvirt tags/patchew/cover.1771244723.git.phrdina@redhat.com
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(-)
[libvirt PATCH 00/24] IOMMUFD fixes and hotplug support
Posted by Pavel Hrdina via Devel 2 weeks ago
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
Re: [libvirt PATCH 00/24] IOMMUFD fixes and hotplug support
Posted by Michal Prívozník via Devel 2 weeks ago
On 2/16/26 13:27, Pavel Hrdina via Devel wrote:
> 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

>  129 files changed, 694 insertions(+), 199 deletions(-)
> 

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>

Michal