Signed-off-by: Chunyan Liu <cyliu(a)suse.com>
---
src/qemu/qemu_driver.c | 67 ++++++++++++++++++++++++++++--------------------
1 files changed, 39 insertions(+), 28 deletions(-)
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 46d975e..1b81689 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -11317,37 +11317,11 @@ qemuNodeDeviceDettach(virNodeDevicePtr dev)
}
static int
-qemuNodeDeviceReAttach(virNodeDevicePtr dev)
+virHostdevPciNodeDeviceReAttach(virHostdevManagerPtr hostdev_mgr,
+ virPCIDevicePtr pci)
{
- virPCIDevicePtr pci = NULL;
virPCIDevicePtr other;
- unsigned domain = 0, bus = 0, slot = 0, function = 0;
int ret = -1;
- virNodeDeviceDefPtr def = NULL;
- char *xml = NULL;
- virHostdevManagerPtr hostdev_mgr;
-
- xml = virNodeDeviceGetXMLDesc(dev, 0);
- if (!xml)
- goto cleanup;
-
- def = virNodeDeviceDefParseString(xml, EXISTING_DEVICE, NULL);
- if (!def)
- goto cleanup;
-
- if (virNodeDeviceReAttachEnsureACL(dev->conn, def) < 0)
- goto cleanup;
-
- if (qemuNodeDeviceGetPciInfo(def, &domain, &bus, &slot, &function)
< 0)
- goto cleanup;
-
- pci = virPCIDeviceNew(domain, bus, slot, function);
- if (!pci)
- goto cleanup;
-
- hostdev_mgr = virHostdevManagerGetDefault();
- if (hostdev_mgr == NULL)
- goto cleanup_pci;
virObjectLock(hostdev_mgr->activePciHostdevs);
virObjectLock(hostdev_mgr->inactivePciHostdevs);
@@ -11380,6 +11354,43 @@ qemuNodeDeviceReAttach(virNodeDevicePtr dev)
out:
virObjectUnlock(hostdev_mgr->inactivePciHostdevs);
virObjectUnlock(hostdev_mgr->activePciHostdevs);
+ return ret;
+}
+
+static int
+qemuNodeDeviceReAttach(virNodeDevicePtr dev)
+{
+ virPCIDevicePtr pci = NULL;
+ unsigned domain = 0, bus = 0, slot = 0, function = 0;
+ int ret = -1;
+ virNodeDeviceDefPtr def = NULL;
+ char *xml = NULL;
+ virHostdevManagerPtr hostdev_mgr;
+
+ xml = virNodeDeviceGetXMLDesc(dev, 0);
+ if (!xml)
+ goto cleanup;
+
+ def = virNodeDeviceDefParseString(xml, EXISTING_DEVICE, NULL);
+ if (!def)
+ goto cleanup;
+
+ if (virNodeDeviceReAttachEnsureACL(dev->conn, def) < 0)
+ goto cleanup;
+
+ if (qemuNodeDeviceGetPciInfo(def, &domain, &bus, &slot, &function)
< 0)
+ goto cleanup;
+
+ pci = virPCIDeviceNew(domain, bus, slot, function);
+ if (!pci)
+ goto cleanup;
+
+ hostdev_mgr = virHostdevManagerGetDefault();
+ if (hostdev_mgr == NULL)
+ goto cleanup_pci;
+
+ ret = virHostdevPciNodeDeviceReAttach(hostdev_mgr, pci);
+
cleanup_pci:
virPCIDeviceFree(pci);
cleanup:
--
1.6.0.2