#include "viralloc.h"
#include "virstring.h"
#include "vircrypto.h"
@@ -336,3 +337,35 @@ virDomainDriverSetupPersistentDefBlkioParams(virDomainDefPtr persistentDef,
return ret;
}
+
+
+int
+virDomainDriverNodeDeviceGetPCIInfo(virNodeDeviceDefPtr def,
+ unsigned *domain,
+ unsigned *bus,
+ unsigned *slot,
+ unsigned *function)
+{
+ virNodeDevCapsDefPtr cap;
+
+ cap = def->caps;
+ while (cap) {
+ if (cap->data.type == VIR_NODE_DEV_CAP_PCI_DEV) {
+ *domain = cap->data.pci_dev.domain;
+ *bus = cap->data.pci_dev.bus;
+ *slot = cap->data.pci_dev.slot;
+ *function = cap->data.pci_dev.function;
+ break;
+ }
+
+ cap = cap->next;
+ }
+
+ if (!cap) {
+ virReportError(VIR_ERR_INVALID_ARG,
+ _("device %s is not a PCI device"), def->name);
+ return -1;
+ }
+
+ return 0;
+}
diff --git a/src/hypervisor/domain_driver.h b/src/hypervisor/domain_driver.h
index b66ae2d421..2bb053d559 100644
--- a/src/hypervisor/domain_driver.h
+++ b/src/hypervisor/domain_driver.h
@@ -21,6 +21,7 @@
#pragma once
#include "domain_conf.h"
+#include "node_device_conf.h"
char *
virDomainDriverGenerateRootHash(const char *drivername,
@@ -45,3 +46,9 @@ int virDomainDriverParseBlkioDeviceStr(char *blkioDeviceStr, const char *type,
int virDomainDriverSetupPersistentDefBlkioParams(virDomainDefPtr persistentDef,
virTypedParameterPtr params,
int nparams);
+
+int virDomainDriverNodeDeviceGetPCIInfo(virNodeDeviceDefPtr def,
+ unsigned *domain,
+ unsigned *bus,
+ unsigned *slot,
+ unsigned *function);
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index c325040b60..55284577b0 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -1445,6 +1445,7 @@ virDomainCgroupSetupMemtune;
virDomainDriverGenerateMachineName;
virDomainDriverGenerateRootHash;
virDomainDriverMergeBlkioDevice;
+virDomainDriverNodeDeviceGetPCIInfo;
virDomainDriverParseBlkioDeviceStr;
virDomainDriverSetupPersistentDefBlkioParams;
diff --git a/src/libxl/libxl_driver.c b/src/libxl/libxl_driver.c
index 5bd3614e21..0821d39c9b 100644
--- a/src/libxl/libxl_driver.c
+++ b/src/libxl/libxl_driver.c
@@ -56,6 +56,7 @@
#include "cpu/cpu.h"
#include "virutil.h"
#include "domain_validate.h"
+#include "domain_driver.h"
#define VIR_FROM_THIS VIR_FROM_LIBXL
@@ -5773,37 +5774,6 @@ libxlConnectSupportsFeature(virConnectPtr conn, int feature)
}
}
-static int
-libxlNodeDeviceGetPCIInfo(virNodeDeviceDefPtr def,
- unsigned *domain,
- unsigned *bus,
- unsigned *slot,
- unsigned *function)
-{
- virNodeDevCapsDefPtr cap;
-
- cap = def->caps;
- while (cap) {
- if (cap->data.type == VIR_NODE_DEV_CAP_PCI_DEV) {
- *domain = cap->data.pci_dev.domain;
- *bus = cap->data.pci_dev.bus;
- *slot = cap->data.pci_dev.slot;
- *function = cap->data.pci_dev.function;
- break;
- }
-
- cap = cap->next;
- }
-
- if (!cap) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("device %s is not a PCI device"), def->name);
- return -1;
- }
-
- return 0;
-}
-
static int
libxlNodeDeviceDetachFlags(virNodeDevicePtr dev,
const char *driverName,
@@ -5845,7 +5815,7 @@ libxlNodeDeviceDetachFlags(virNodeDevicePtr dev,
if (virNodeDeviceDetachFlagsEnsureACL(dev->conn, def) < 0)
goto cleanup;
- if (libxlNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
+ if (virDomainDriverNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
goto cleanup;
pci = virPCIDeviceNew(domain, bus, slot, function);
@@ -5916,7 +5886,7 @@ libxlNodeDeviceReAttach(virNodeDevicePtr dev)
if (virNodeDeviceReAttachEnsureACL(dev->conn, def) < 0)
goto cleanup;
- if (libxlNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
+ if (virDomainDriverNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
goto cleanup;
pci = virPCIDeviceNew(domain, bus, slot, function);
@@ -5974,7 +5944,7 @@ libxlNodeDeviceReset(virNodeDevicePtr dev)
if (virNodeDeviceResetEnsureACL(dev->conn, def) < 0)
goto cleanup;
- if (libxlNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
+ if (virDomainDriverNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
goto cleanup;
pci = virPCIDeviceNew(domain, bus, slot, function);
diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c
index 027617deef..0a732a241d 100644
--- a/src/qemu/qemu_driver.c
+++ b/src/qemu/qemu_driver.c
@@ -11955,37 +11955,6 @@ qemuDomainMigrateConfirm3Params(virDomainPtr domain,
}
-static int
-qemuNodeDeviceGetPCIInfo(virNodeDeviceDefPtr def,
- unsigned *domain,
- unsigned *bus,
- unsigned *slot,
- unsigned *function)
-{
- virNodeDevCapsDefPtr cap;
-
- cap = def->caps;
- while (cap) {
- if (cap->data.type == VIR_NODE_DEV_CAP_PCI_DEV) {
- *domain = cap->data.pci_dev.domain;
- *bus = cap->data.pci_dev.bus;
- *slot = cap->data.pci_dev.slot;
- *function = cap->data.pci_dev.function;
- break;
- }
-
- cap = cap->next;
- }
-
- if (!cap) {
- virReportError(VIR_ERR_INVALID_ARG,
- _("device %s is not a PCI device"), def->name);
- return -1;
- }
-
- return 0;
-}
-
static int
qemuNodeDeviceDetachFlags(virNodeDevicePtr dev,
const char *driverName,
@@ -12028,7 +11997,7 @@ qemuNodeDeviceDetachFlags(virNodeDevicePtr dev,
if (virNodeDeviceDetachFlagsEnsureACL(dev->conn, def) < 0)
goto cleanup;
- if (qemuNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
+ if (virDomainDriverNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
goto cleanup;
pci = virPCIDeviceNew(domain, bus, slot, function);
@@ -12109,7 +12078,7 @@ qemuNodeDeviceReAttach(virNodeDevicePtr dev)
if (virNodeDeviceReAttachEnsureACL(dev->conn, def) < 0)
goto cleanup;
- if (qemuNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
+ if (virDomainDriverNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
goto cleanup;
pci = virPCIDeviceNew(domain, bus, slot, function);
@@ -12163,7 +12132,7 @@ qemuNodeDeviceReset(virNodeDevicePtr dev)
if (virNodeDeviceResetEnsureACL(dev->conn, def) < 0)
goto cleanup;
- if (qemuNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
+ if (virDomainDriverNodeDeviceGetPCIInfo(def, &domain, &bus, &slot, &function) < 0)
goto cleanup;
pci = virPCIDeviceNew(domain, bus, slot, function);