[PATCH v14 23/49] move virHostdevUpdate* functions to virhostdev.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Signed-off-by: Chunyan Liu <cyliu@xxxxxxxx>
---
 src/libvirt_private.syms |   3 +
 src/qemu/qemu_hostdev.c  | 151 -----------------------------------------------
 src/util/virhostdev.c    | 151 +++++++++++++++++++++++++++++++++++++++++++++++
 src/util/virhostdev.h    |  12 ++++
 4 files changed, 166 insertions(+), 151 deletions(-)

diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index 70085c7..8aba3cf 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1296,6 +1296,9 @@ virHookPresent;
 virHostdevManagerGetDefault;
 virHostdevPreparePCIDevices;
 virHostdevReAttachPCIDevices;
+virHostdevUpdateActivePciHostdevs;
+virHostdevUpdateActiveScsiHostdevs;
+virHostdevUpdateActiveUsbHostdevs;
 
 # util/viridentity.h
 virIdentityGetAttr;
diff --git a/src/qemu/qemu_hostdev.c b/src/qemu/qemu_hostdev.c
index ee3a18d..bb3dc69 100644
--- a/src/qemu/qemu_hostdev.c
+++ b/src/qemu/qemu_hostdev.c
@@ -41,65 +41,6 @@
 
 #define VIR_FROM_THIS VIR_FROM_QEMU
 
-static int
-virHostdevUpdateActivePciHostdevs(virHostdevManagerPtr mgr,
-                                  const char *drv_name,
-                                  virDomainDefPtr def)
-{
-    virDomainHostdevDefPtr hostdev = NULL;
-    virPCIDevicePtr dev = NULL;
-    size_t i;
-    int ret = -1;
-
-    virObjectLock(mgr->activePciHostdevs);
-    virObjectLock(mgr->inactivePciHostdevs);
-
-    for (i = 0; i < def->nhostdevs; i++) {
-        hostdev = def->hostdevs[i];
-
-        if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
-            continue;
-        if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
-            continue;
-
-        dev = virPCIDeviceNew(hostdev->source.subsys.u.pci.addr.domain,
-                              hostdev->source.subsys.u.pci.addr.bus,
-                              hostdev->source.subsys.u.pci.addr.slot,
-                              hostdev->source.subsys.u.pci.addr.function);
-
-        if (!dev)
-            goto cleanup;
-
-        virPCIDeviceSetManaged(dev, hostdev->managed);
-        if (hostdev->source.subsys.u.pci.backend
-            == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) {
-            if (virPCIDeviceSetStubDriver(dev, "vfio-pci") < 0)
-                goto cleanup;
-        } else {
-            if (virPCIDeviceSetStubDriver(dev, "pci-stub") < 0)
-                goto cleanup;
-
-        }
-        virPCIDeviceSetUsedBy(dev, drv_name, def->name);
-
-        /* Setup the original states for the PCI device */
-        virPCIDeviceSetUnbindFromStub(dev, hostdev->origstates.states.pci.unbind_from_stub);
-        virPCIDeviceSetRemoveSlot(dev, hostdev->origstates.states.pci.remove_slot);
-        virPCIDeviceSetReprobe(dev, hostdev->origstates.states.pci.reprobe);
-
-        if (virPCIDeviceListAdd(mgr->activePciHostdevs, dev) < 0)
-            goto cleanup;
-        dev = NULL;
-    }
-
-    ret = 0;
-cleanup:
-    virPCIDeviceFree(dev);
-    virObjectUnlock(mgr->activePciHostdevs);
-    virObjectUnlock(mgr->inactivePciHostdevs);
-    return ret;
-}
-
 int
 qemuUpdateActivePciHostdevs(virQEMUDriverPtr driver,
                             virDomainDefPtr def)
@@ -112,49 +53,6 @@ qemuUpdateActivePciHostdevs(virQEMUDriverPtr driver,
     return virHostdevUpdateActivePciHostdevs(mgr, QEMU_DRIVER_NAME, def);
 }
 
-static int
-virHostdevUpdateActiveUsbHostdevs(virHostdevManagerPtr mgr,
-                                  const char *drv_name,
-                                  virDomainDefPtr def)
-{
-    virDomainHostdevDefPtr hostdev = NULL;
-    size_t i;
-    int ret = -1;
-
-    virObjectLock(mgr->activeUsbHostdevs);
-    for (i = 0; i < def->nhostdevs; i++) {
-        virUSBDevicePtr usb = NULL;
-        hostdev = def->hostdevs[i];
-
-        if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
-            continue;
-        if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB)
-            continue;
-
-        usb = virUSBDeviceNew(hostdev->source.subsys.u.usb.bus,
-                              hostdev->source.subsys.u.usb.device,
-                              NULL);
-        if (!usb) {
-            VIR_WARN("Unable to reattach USB device %03d.%03d on domain %s",
-                     hostdev->source.subsys.u.usb.bus,
-                     hostdev->source.subsys.u.usb.device,
-                     def->name);
-            continue;
-        }
-
-        virUSBDeviceSetUsedBy(usb, drv_name, def->name);
-
-        if (virUSBDeviceListAdd(mgr->activeUsbHostdevs, usb) < 0) {
-            virUSBDeviceFree(usb);
-            goto cleanup;
-        }
-    }
-    ret = 0;
-cleanup:
-    virObjectUnlock(mgr->activeUsbHostdevs);
-    return ret;
-}
-
 int
 qemuUpdateActiveUsbHostdevs(virQEMUDriverPtr driver,
                             virDomainDefPtr def)
@@ -167,55 +65,6 @@ qemuUpdateActiveUsbHostdevs(virQEMUDriverPtr driver,
     return virHostdevUpdateActiveUsbHostdevs(mgr, QEMU_DRIVER_NAME, def);
 }
 
-static int
-virHostdevUpdateActiveScsiHostdevs(virHostdevManagerPtr mgr,
-                                   const char *drv_name,
-                                   virDomainDefPtr def)
-{
-    virDomainHostdevDefPtr hostdev = NULL;
-    size_t i;
-    int ret = -1;
-    virSCSIDevicePtr scsi = NULL;
-    virSCSIDevicePtr tmp = NULL;
-
-    virObjectLock(mgr->activeScsiHostdevs);
-    for (i = 0; i < def->nhostdevs; i++) {
-        hostdev = def->hostdevs[i];
-
-        if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
-            hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI)
-            continue;
-
-        if (!(scsi = virSCSIDeviceNew(NULL,
-                                      hostdev->source.subsys.u.scsi.adapter,
-                                      hostdev->source.subsys.u.scsi.bus,
-                                      hostdev->source.subsys.u.scsi.target,
-                                      hostdev->source.subsys.u.scsi.unit,
-                                      hostdev->readonly,
-                                      hostdev->shareable)))
-            goto cleanup;
-
-        if ((tmp = virSCSIDeviceListFind(mgr->activeScsiHostdevs, scsi))) {
-            if (virSCSIDeviceSetUsedBy(tmp, drv_name, def->name) < 0) {
-                virSCSIDeviceFree(scsi);
-                goto cleanup;
-            }
-            virSCSIDeviceFree(scsi);
-        } else {
-            if (virSCSIDeviceSetUsedBy(scsi, drv_name, def->name) < 0 ||
-                virSCSIDeviceListAdd(mgr->activeScsiHostdevs, scsi) < 0) {
-                virSCSIDeviceFree(scsi);
-                goto cleanup;
-            }
-        }
-    }
-    ret = 0;
-
-cleanup:
-    virObjectUnlock(mgr->activeScsiHostdevs);
-    return ret;
-}
-
 int
 qemuUpdateActiveScsiHostdevs(virQEMUDriverPtr driver,
                              virDomainDefPtr def)
diff --git a/src/util/virhostdev.c b/src/util/virhostdev.c
index dec3c83..47447fa 100644
--- a/src/util/virhostdev.c
+++ b/src/util/virhostdev.c
@@ -776,3 +776,154 @@ cleanup:
     virObjectUnlock(hostdev_mgr->activePciHostdevs);
     virObjectUnlock(hostdev_mgr->inactivePciHostdevs);
 }
+
+int
+virHostdevUpdateActivePciHostdevs(virHostdevManagerPtr mgr,
+                                  const char *drv_name,
+                                  virDomainDefPtr def)
+{
+    virDomainHostdevDefPtr hostdev = NULL;
+    virPCIDevicePtr dev = NULL;
+    size_t i;
+    int ret = -1;
+
+    virObjectLock(mgr->activePciHostdevs);
+    virObjectLock(mgr->inactivePciHostdevs);
+
+    for (i = 0; i < def->nhostdevs; i++) {
+        hostdev = def->hostdevs[i];
+
+        if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
+            continue;
+        if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_PCI)
+            continue;
+
+        dev = virPCIDeviceNew(hostdev->source.subsys.u.pci.addr.domain,
+                              hostdev->source.subsys.u.pci.addr.bus,
+                              hostdev->source.subsys.u.pci.addr.slot,
+                              hostdev->source.subsys.u.pci.addr.function);
+
+        if (!dev)
+            goto cleanup;
+
+        virPCIDeviceSetManaged(dev, hostdev->managed);
+        if (hostdev->source.subsys.u.pci.backend
+            == VIR_DOMAIN_HOSTDEV_PCI_BACKEND_VFIO) {
+            if (virPCIDeviceSetStubDriver(dev, "vfio-pci") < 0)
+                goto cleanup;
+        } else {
+            if (virPCIDeviceSetStubDriver(dev, "pci-stub") < 0)
+                goto cleanup;
+
+        }
+        virPCIDeviceSetUsedBy(dev, drv_name, def->name);
+
+        /* Setup the original states for the PCI device */
+        virPCIDeviceSetUnbindFromStub(dev, hostdev->origstates.states.pci.unbind_from_stub);
+        virPCIDeviceSetRemoveSlot(dev, hostdev->origstates.states.pci.remove_slot);
+        virPCIDeviceSetReprobe(dev, hostdev->origstates.states.pci.reprobe);
+
+        if (virPCIDeviceListAdd(mgr->activePciHostdevs, dev) < 0)
+            goto cleanup;
+        dev = NULL;
+    }
+
+    ret = 0;
+cleanup:
+    virPCIDeviceFree(dev);
+    virObjectUnlock(mgr->activePciHostdevs);
+    virObjectUnlock(mgr->inactivePciHostdevs);
+    return ret;
+}
+
+int
+virHostdevUpdateActiveUsbHostdevs(virHostdevManagerPtr mgr,
+                                  const char *drv_name,
+                                  virDomainDefPtr def)
+{
+    virDomainHostdevDefPtr hostdev = NULL;
+    size_t i;
+    int ret = -1;
+
+    virObjectLock(mgr->activeUsbHostdevs);
+    for (i = 0; i < def->nhostdevs; i++) {
+        virUSBDevicePtr usb = NULL;
+        hostdev = def->hostdevs[i];
+
+        if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS)
+            continue;
+        if (hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_USB)
+            continue;
+
+        usb = virUSBDeviceNew(hostdev->source.subsys.u.usb.bus,
+                              hostdev->source.subsys.u.usb.device,
+                              NULL);
+        if (!usb) {
+            VIR_WARN("Unable to reattach USB device %03d.%03d on domain %s",
+                     hostdev->source.subsys.u.usb.bus,
+                     hostdev->source.subsys.u.usb.device,
+                     def->name);
+            continue;
+        }
+
+        virUSBDeviceSetUsedBy(usb, drv_name, def->name);
+
+        if (virUSBDeviceListAdd(mgr->activeUsbHostdevs, usb) < 0) {
+            virUSBDeviceFree(usb);
+            goto cleanup;
+        }
+    }
+    ret = 0;
+cleanup:
+    virObjectUnlock(mgr->activeUsbHostdevs);
+    return ret;
+}
+
+int
+virHostdevUpdateActiveScsiHostdevs(virHostdevManagerPtr mgr,
+                                   const char *drv_name,
+                                   virDomainDefPtr def)
+{
+    virDomainHostdevDefPtr hostdev = NULL;
+    size_t i;
+    int ret = -1;
+    virSCSIDevicePtr scsi = NULL;
+    virSCSIDevicePtr tmp = NULL;
+
+    virObjectLock(mgr->activeScsiHostdevs);
+    for (i = 0; i < def->nhostdevs; i++) {
+        hostdev = def->hostdevs[i];
+
+        if (hostdev->mode != VIR_DOMAIN_HOSTDEV_MODE_SUBSYS ||
+            hostdev->source.subsys.type != VIR_DOMAIN_HOSTDEV_SUBSYS_TYPE_SCSI)
+            continue;
+
+        if (!(scsi = virSCSIDeviceNew(NULL,
+                                      hostdev->source.subsys.u.scsi.adapter,
+                                      hostdev->source.subsys.u.scsi.bus,
+                                      hostdev->source.subsys.u.scsi.target,
+                                      hostdev->source.subsys.u.scsi.unit,
+                                      hostdev->readonly,
+                                      hostdev->shareable)))
+            goto cleanup;
+
+        if ((tmp = virSCSIDeviceListFind(mgr->activeScsiHostdevs, scsi))) {
+            if (virSCSIDeviceSetUsedBy(tmp, drv_name, def->name) < 0) {
+                virSCSIDeviceFree(scsi);
+                goto cleanup;
+            }
+            virSCSIDeviceFree(scsi);
+        } else {
+            if (virSCSIDeviceSetUsedBy(scsi, drv_name, def->name) < 0 ||
+                virSCSIDeviceListAdd(mgr->activeScsiHostdevs, scsi) < 0) {
+                virSCSIDeviceFree(scsi);
+                goto cleanup;
+            }
+        }
+    }
+    ret = 0;
+
+cleanup:
+    virObjectUnlock(mgr->activeScsiHostdevs);
+    return ret;
+}
diff --git a/src/util/virhostdev.h b/src/util/virhostdev.h
index c8b17e6..e6b5e31 100644
--- a/src/util/virhostdev.h
+++ b/src/util/virhostdev.h
@@ -65,5 +65,17 @@ virHostdevReAttachPCIDevices(virHostdevManagerPtr hostdev_mgr,
                              virDomainHostdevDefPtr *hostdevs,
                              int nhostdevs,
                              char *oldStateDir);
+int
+virHostdevUpdateActivePciHostdevs(virHostdevManagerPtr mgr,
+                                  const char *drv_name,
+                                  virDomainDefPtr def);
+int
+virHostdevUpdateActiveUsbHostdevs(virHostdevManagerPtr mgr,
+                                  const char *drv_name,
+                                  virDomainDefPtr def);
+int
+virHostdevUpdateActiveScsiHostdevs(virHostdevManagerPtr mgr,
+                                   const char *drv_name,
+                                   virDomainDefPtr def);
 
 #endif /* __VIR_HOSTDEV_H__ */
-- 
1.9.0

--
libvir-list mailing list
libvir-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/libvir-list




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]