#include "virstring.h"
#include "vircrypto.h"
#include "virutil.h"
+#include "virhostdev.h"
+#include "viraccessapicheck.h"
+#include "datatypes.h"
+#include "driver.h"
#define VIR_FROM_THIS VIR_FROM_DOMAIN
return 0;
}
+
+
+int
+virDomainDriverNodeDeviceReset(virNodeDevicePtr dev,
+ virHostdevManagerPtr hostdevMgr)
+{
+ virPCIDevicePtr pci;
+ virPCIDeviceAddress devAddr;
+ virNodeDeviceDefPtr def = NULL;
+ g_autofree char *xml = NULL;
+ virConnectPtr nodeconn = NULL;
+ virNodeDevicePtr nodedev = NULL;
+ int ret = -1;
+
+ if (!(nodeconn = virGetConnectNodeDev()))
+ goto cleanup;
+
+ /* 'dev' is associated with virConnectPtr, so for split
+ * daemons, we need to get a copy that is associated with
+ * the virnodedevd daemon. */
+ if (!(nodedev = virNodeDeviceLookupByName(
+ nodeconn, virNodeDeviceGetName(dev))))
+ goto cleanup;
+
+ xml = virNodeDeviceGetXMLDesc(nodedev, 0);
+ if (!xml)
+ goto cleanup;
+
+ def = virNodeDeviceDefParseString(xml, EXISTING_DEVICE, NULL);
+ if (!def)
+ goto cleanup;
+
+ /* ACL check must happen against original 'dev',
+ * not the new 'nodedev' we acquired */
+ if (virNodeDeviceResetEnsureACL(dev->conn, def) < 0)
+ goto cleanup;
+
+ if (virDomainDriverNodeDeviceGetPCIInfo(def, &devAddr) < 0)
+ goto cleanup;
+
+ pci = virPCIDeviceNew(&devAddr);
+ if (!pci)
+ goto cleanup;
+
+ ret = virHostdevPCINodeDeviceReset(hostdevMgr, pci);
+
+ virPCIDeviceFree(pci);
+ cleanup:
+ virNodeDeviceDefFree(def);
+ virObjectUnref(nodedev);
+ virObjectUnref(nodeconn);
+ return ret;
+
+}
#include "domain_conf.h"
#include "node_device_conf.h"
+#include "virhostdev.h"
char *
virDomainDriverGenerateRootHash(const char *drivername,
int virDomainDriverNodeDeviceGetPCIInfo(virNodeDeviceDefPtr def,
virPCIDeviceAddressPtr devAddr);
+
+int virDomainDriverNodeDeviceReset(virNodeDevicePtr dev,
+ virHostdevManagerPtr hostdevMgr);
hypervisor_sources,
],
dependencies: [
+ access_dep,
src_dep,
],
include_directories: [
virDomainDriverGenerateRootHash;
virDomainDriverMergeBlkioDevice;
virDomainDriverNodeDeviceGetPCIInfo;
+virDomainDriverNodeDeviceReset;
virDomainDriverParseBlkioDeviceStr;
virDomainDriverSetupPersistentDefBlkioParams;
static int
libxlNodeDeviceReset(virNodeDevicePtr dev)
{
- virPCIDevicePtr pci = NULL;
- virPCIDeviceAddress devAddr;
- int ret = -1;
- virNodeDeviceDefPtr def = NULL;
- g_autofree char *xml = NULL;
libxlDriverPrivatePtr driver = dev->conn->privateData;
virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
- virConnectPtr nodeconn = NULL;
- virNodeDevicePtr nodedev = NULL;
-
- if (!(nodeconn = virGetConnectNodeDev()))
- goto cleanup;
-
- /* 'dev' is associated with the QEMU virConnectPtr,
- * so for split daemons, we need to get a copy that
- * is associated with the virnodedevd daemon.
- */
- if (!(nodedev = virNodeDeviceLookupByName(
- nodeconn, virNodeDeviceGetName(dev))))
- goto cleanup;
- xml = virNodeDeviceGetXMLDesc(nodedev, 0);
- if (!xml)
- goto cleanup;
-
- def = virNodeDeviceDefParseString(xml, EXISTING_DEVICE, NULL);
- if (!def)
- goto cleanup;
-
- /* ACL check must happen against original 'dev',
- * not the new 'nodedev' we acquired */
- if (virNodeDeviceResetEnsureACL(dev->conn, def) < 0)
- goto cleanup;
-
- if (virDomainDriverNodeDeviceGetPCIInfo(def, &devAddr) < 0)
- goto cleanup;
-
- pci = virPCIDeviceNew(&devAddr);
- if (!pci)
- goto cleanup;
-
- if (virHostdevPCINodeDeviceReset(hostdev_mgr, pci) < 0)
- goto cleanup;
-
- ret = 0;
-
- cleanup:
- virPCIDeviceFree(pci);
- virNodeDeviceDefFree(def);
- virObjectUnref(nodedev);
- virObjectUnref(nodeconn);
- return ret;
+ /* virNodeDeviceResetEnsureACL() is being called by
+ * virDomainDriverNodeDeviceReset() */
+ return virDomainDriverNodeDeviceReset(dev, hostdev_mgr);
}
static char *
qemuNodeDeviceReset(virNodeDevicePtr dev)
{
virQEMUDriverPtr driver = dev->conn->privateData;
- virPCIDevicePtr pci;
- virPCIDeviceAddress devAddr;
- int ret = -1;
- virNodeDeviceDefPtr def = NULL;
- g_autofree char *xml = NULL;
virHostdevManagerPtr hostdev_mgr = driver->hostdevMgr;
- virConnectPtr nodeconn = NULL;
- virNodeDevicePtr nodedev = NULL;
-
- if (!(nodeconn = virGetConnectNodeDev()))
- goto cleanup;
-
- /* 'dev' is associated with the QEMU virConnectPtr,
- * so for split daemons, we need to get a copy that
- * is associated with the virnodedevd daemon.
- */
- if (!(nodedev = virNodeDeviceLookupByName(
- nodeconn, virNodeDeviceGetName(dev))))
- goto cleanup;
- xml = virNodeDeviceGetXMLDesc(nodedev, 0);
- if (!xml)
- goto cleanup;
-
- def = virNodeDeviceDefParseString(xml, EXISTING_DEVICE, NULL);
- if (!def)
- goto cleanup;
-
- /* ACL check must happen against original 'dev',
- * not the new 'nodedev' we acquired */
- if (virNodeDeviceResetEnsureACL(dev->conn, def) < 0)
- goto cleanup;
-
- if (virDomainDriverNodeDeviceGetPCIInfo(def, &devAddr) < 0)
- goto cleanup;
-
- pci = virPCIDeviceNew(&devAddr);
- if (!pci)
- goto cleanup;
-
- ret = virHostdevPCINodeDeviceReset(hostdev_mgr, pci);
-
- virPCIDeviceFree(pci);
- cleanup:
- virNodeDeviceDefFree(def);
- virObjectUnref(nodedev);
- virObjectUnref(nodeconn);
- return ret;
+ /* virNodeDeviceResetEnsureACL() is being called by
+ * virDomainDriverNodeDeviceReset() */
+ return virDomainDriverNodeDeviceReset(dev, hostdev_mgr);
}
static int