|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH v4 2/6] libxl: Refactor some PCI device handling functions
In order to support the new hotplug=0 option for PCI device passthrough,
3 functions used to manage the assignable PCI device list need to be
made available from outside of libxl_pci.c.
This patch renames the function pciback_dev_is_assigned() as
libxl__pciback_dev_is_assigned() and make it available internally.
libxl__device_pci_assignable_add() is also exported internally. Finaly,
libxl_pci_assignable() is renamed as libxl_device_pci_assignable() to
match with other libxl_device_pci_*() APIs and exported in libxl.h.
Signed-off-by: Thierry Escande <thierry.escande@xxxxxxxxxx>
---
v4: new patch
---
tools/include/libxl.h | 1 +
tools/libs/light/libxl_internal.h | 5 +++++
tools/libs/light/libxl_pci.c | 18 +++++++++---------
3 files changed, 15 insertions(+), 9 deletions(-)
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index 7c098edab6..efd2664a90 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -2666,6 +2666,7 @@ int libxl_device_pci_assignable_add(libxl_ctx *ctx,
libxl_device_pci *pci, int r
int libxl_device_pci_assignable_remove(libxl_ctx *ctx, libxl_device_pci *pci,
int rebind);
libxl_device_pci *libxl_device_pci_assignable_list(libxl_ctx *ctx, int *num);
void libxl_device_pci_assignable_list_free(libxl_device_pci *list, int num);
+bool libxl_device_pci_assignable(libxl_ctx *ctx, libxl_device_pci *pci);
/* CPUID handling */
int libxl_cpuid_parse_config(libxl_cpuid_policy_list *cpuid, const char* str);
diff --git a/tools/libs/light/libxl_internal.h
b/tools/libs/light/libxl_internal.h
index b65e0064b9..e87500bf55 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -1729,6 +1729,11 @@ _hidden int libxl__device_pci_setdefault(libxl__gc *gc,
uint32_t domid,
libxl_device_pci *pci, bool hotplug);
_hidden bool libxl__is_igd_vga_passthru(libxl__gc *gc,
const libxl_domain_config *d_config);
+_hidden int libxl__pciback_dev_is_assigned(libxl__gc *gc,
+ libxl_device_pci *pci);
+_hidden int libxl__device_pci_assignable_add(libxl__gc *gc,
+ libxl_device_pci *pci,
+ int rebind);
/* from libxl_dtdev */
diff --git a/tools/libs/light/libxl_pci.c b/tools/libs/light/libxl_pci.c
index 49d272d0de..5551abe0a2 100644
--- a/tools/libs/light/libxl_pci.c
+++ b/tools/libs/light/libxl_pci.c
@@ -686,7 +686,7 @@ out:
return rc;
}
-static int pciback_dev_is_assigned(libxl__gc *gc, libxl_device_pci *pci)
+int libxl__pciback_dev_is_assigned(libxl__gc *gc, libxl_device_pci *pci)
{
char * spath;
int rc;
@@ -755,9 +755,9 @@ static int pciback_dev_unassign(libxl__gc *gc,
libxl_device_pci *pci)
return 0;
}
-static int libxl__device_pci_assignable_add(libxl__gc *gc,
- libxl_device_pci *pci,
- int rebind)
+int libxl__device_pci_assignable_add(libxl__gc *gc,
+ libxl_device_pci *pci,
+ int rebind)
{
libxl_ctx *ctx = libxl__gc_owner(gc);
unsigned dom, bus, dev, func;
@@ -798,7 +798,7 @@ static int libxl__device_pci_assignable_add(libxl__gc *gc,
}
/* Check to see if it's already assigned to pciback */
- rc = pciback_dev_is_assigned(gc, pci);
+ rc = libxl__pciback_dev_is_assigned(gc, pci);
if ( rc < 0 ) {
return ERROR_FAIL;
}
@@ -913,7 +913,7 @@ static int libxl__device_pci_assignable_remove(libxl__gc
*gc,
}
/* Unbind from pciback */
- if ( (rc = pciback_dev_is_assigned(gc, pci)) < 0 ) {
+ if ( (rc = libxl__pciback_dev_is_assigned(gc, pci)) < 0 ) {
return ERROR_FAIL;
} else if ( rc ) {
pciback_dev_unassign(gc, pci);
@@ -1509,7 +1509,7 @@ int libxl_device_pci_add(libxl_ctx *ctx, uint32_t domid,
return AO_INPROGRESS;
}
-static bool libxl_pci_assignable(libxl_ctx *ctx, libxl_device_pci *pci)
+bool libxl_device_pci_assignable(libxl_ctx *ctx, libxl_device_pci *pci)
{
libxl_device_pci *pcis;
int num;
@@ -1572,13 +1572,13 @@ void libxl__device_pci_add(libxl__egc *egc, uint32_t
domid,
rc = libxl__device_pci_setdefault(gc, domid, pci, !starting);
if (rc) goto out;
- if (pci->seize && !pciback_dev_is_assigned(gc, pci)) {
+ if (pci->seize && !libxl__pciback_dev_is_assigned(gc, pci)) {
rc = libxl__device_pci_assignable_add(gc, pci, 1);
if ( rc )
goto out;
}
- if (!libxl_pci_assignable(ctx, pci)) {
+ if (!libxl_device_pci_assignable(ctx, pci)) {
LOGD(ERROR, domid, "PCI device %x:%x:%x.%x is not assignable",
pci->domain, pci->bus, pci->dev, pci->func);
rc = ERROR_FAIL;
--
2.53.0
--
Thierry Escande | Vates XCP-ng Developer
XCP-ng & Xen Orchestra - Vates solutions
web: https://vates.tech
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |