From 12ee11bc8ea918b8c7c15e52b4bbbd09e2e95fb0 Mon Sep 17 00:00:00 2001 Message-ID: <12ee11bc8ea918b8c7c15e52b4bbbd09e2e95fb0.1774023916.git.phrdina@redhat.com> From: Pavel Hrdina Date: Mon, 16 Mar 2026 15:30:18 +0100 Subject: [PATCH] tests: Add iommufd fdgroup test From: Pavel Hrdina Signed-off-by: Pavel Hrdina Reviewed-by: Peter Krempa (cherry picked from commit 406b7fb0bd82251d94ce1fcb5fd7e35d51e1a1b7) Conflicts: - tests/qemuxmlconftest.c missing upstream commit 6d6da1cbac4f0194ca257c8ff8f5038a96791a62 Resolves: https://redhat.atlassian.net/browse/VOYAGER-309 Signed-off-by: Pavel Hrdina --- src/qemu/qemu_process.c | 14 +++-- src/qemu/qemu_processpriv.h | 2 + .../iommufd-q35-fd.x86_64-latest.args | 41 +++++++++++++ .../iommufd-q35-fd.x86_64-latest.xml | 60 +++++++++++++++++++ tests/qemuxmlconfdata/iommufd-q35-fd.xml | 38 ++++++++++++ tests/qemuxmlconftest.c | 9 ++- 6 files changed, 159 insertions(+), 5 deletions(-) create mode 100644 tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/iommufd-q35-fd.xml diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index 2b1d47ed86..10a4a70f1c 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -7706,9 +7706,11 @@ qemuProcessOpenIommuFd(virDomainObj *vm) * * Find passed FD via virDomainFDAssociate() API for the VM. * + * Exported only to be used in tests. + * * Returns: 0 on success, -1 on failure */ -static int +int qemuProcessGetPassedIommuFd(virDomainObj *vm) { qemuDomainObjPrivate *priv = vm->privateData; @@ -7728,10 +7730,14 @@ qemuProcessGetPassedIommuFd(virDomainObj *vm) return -1; } - iommufd = dup(fdt->fds[0]); + if (fdt->testfds) { + iommufd = dup2(fdt->fds[0], fdt->testfds[0]); + } else { + iommufd = dup(fdt->fds[0]); - if (qemuSecuritySetImageFDLabel(priv->driver->securityManager, vm->def, iommufd) < 0) - return -1; + if (qemuSecuritySetImageFDLabel(priv->driver->securityManager, vm->def, iommufd) < 0) + return -1; + } priv->iommufd = qemuFDPassDirectNew("iommufd", &iommufd); diff --git a/src/qemu/qemu_processpriv.h b/src/qemu/qemu_processpriv.h index 0ba5897f40..4bef5025b9 100644 --- a/src/qemu/qemu_processpriv.h +++ b/src/qemu/qemu_processpriv.h @@ -37,3 +37,5 @@ void qemuProcessHandleDeviceDeleted(qemuMonitor *mon, const char *devAlias); int qemuProcessQMPInitMonitor(qemuMonitor *mon); + +int qemuProcessGetPassedIommuFd(virDomainObj *vm); diff --git a/tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.args b/tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.args new file mode 100644 index 0000000000..7df3d173f3 --- /dev/null +++ b/tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.args @@ -0,0 +1,41 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-q35-test \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-q35-test/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-q35-test/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-q35-test/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=q35-test,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-q35-test/master-key.aes"}' \ +-machine q35,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=2097152k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":2147483648}' \ +-overcommit mem-lock=off \ +-smp 2,sockets=2,cores=1,threads=1 \ +-uuid 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"pcie-root-port","port":16,"chassis":1,"id":"pci.1","bus":"pcie.0","multifunction":true,"addr":"0x2"}' \ +-device '{"driver":"pcie-root-port","port":17,"chassis":2,"id":"pci.2","bus":"pcie.0","addr":"0x2.0x1"}' \ +-device '{"driver":"qemu-xhci","id":"usb","bus":"pci.1","addr":"0x0"}' \ +-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","read-only":false}' \ +-device '{"driver":"ide-hd","bus":"ide.0","drive":"libvirt-1-storage","id":"sata0-0-0","bootindex":1}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"qxl-vga","id":"video0","max_outputs":1,"ram_size":67108864,"vram_size":33554432,"vram64_size_mb":0,"vgamem_mb":8,"bus":"pcie.0","addr":"0x1"}' \ +-global ICH9-LPC.noreboot=off \ +-watchdog-action reset \ +-object '{"qom-type":"iommufd","id":"iommufd0","fd":"20"}' \ +-device '{"driver":"vfio-pci","id":"hostdev0","iommufd":"iommufd0","fd":"0","bus":"pcie.0","addr":"0x3"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.xml b/tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.xml new file mode 100644 index 0000000000..a6be49cbb3 --- /dev/null +++ b/tests/qemuxmlconfdata/iommufd-q35-fd.x86_64-latest.xml @@ -0,0 +1,60 @@ + + q35-test + 11dbdcdd-4c3b-482b-8903-9bdb8c0a2774 + 2097152 + 2097152 + 2 + + + hvm + + + + qemu64 + + + destroy + restart + destroy + + /usr/bin/qemu-system-x86_64 + + + + +
+ + + + + +
+ + + + +
+ + +
+ + +
+ + + +