]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
qemuDomainAttachHostPCIDevice: Handle hostevs with unassigned type of address
authorMichal Privoznik <mprivozn@redhat.com>
Tue, 25 Jan 2022 07:51:26 +0000 (08:51 +0100)
committerMichal Privoznik <mprivozn@redhat.com>
Thu, 27 Jan 2022 12:27:54 +0000 (13:27 +0100)
A <hostdev/> can have <address type='unassigned'/> which means
libvirt manages the device detach from/reattach to the host but
the device is never exposed to the guest. This means that we have
to take a shortcut during hotplug, similar to the one we are
taking when constructing the command line (see
qemuBuildHostdevCommandLine()).

Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=2040548
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
src/qemu/qemu_hotplug.c

index 6e3a60b2253c47a4bbd962622ff19ee660c9af8f..c0c3a8ec9f11333b4d093b5b0bdf353bb3e499a1 100644 (file)
@@ -1668,6 +1668,12 @@ qemuDomainAttachHostPCIDevice(virQEMUDriver *driver,
         qemuDomainFillDeviceIsolationGroup(vm->def, &dev);
     }
 
+    if (info->type == VIR_DOMAIN_DEVICE_ADDRESS_TYPE_UNASSIGNED) {
+        /* Unassigned devices are not exposed to QEMU. Our job is done here. */
+        ret = 0;
+        goto done;
+    }
+
     if (qemuDomainEnsurePCIAddress(vm, &dev) < 0)
         goto error;
     releaseaddr = true;
@@ -1692,6 +1698,7 @@ qemuDomainAttachHostPCIDevice(virQEMUDriver *driver,
  exit_monitor:
     qemuDomainObjExitMonitor(driver, vm);
 
+ done:
     virDomainAuditHostdev(vm, hostdev, "attach", ret == 0);
     if (ret < 0)
         goto error;