|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [RFC PATCH v4 3/6] libxl: Add libxl__device_pci_get_qapi_json() internal API
This function generates the qapi json object for a PCI device to be
passthrough'd to a guest.
With the new option hotplug=0 for PCI passthrough, device parameters
will be passed using Qemu -device command line option. Since -device
accepts qapi json string, this new function will be used to do so.
The code that generates the json object comes from
pci_add_qmp_device_add() which now also uses this new function.
Signed-off-by: Thierry Escande <thierry.escande@xxxxxxxxxx>
---
v4: new patch
---
tools/libs/light/libxl_internal.h | 2 ++
tools/libs/light/libxl_pci.c | 26 ++++++++++++++++++--------
2 files changed, 20 insertions(+), 8 deletions(-)
diff --git a/tools/libs/light/libxl_internal.h
b/tools/libs/light/libxl_internal.h
index e87500bf55..b6d764ad00 100644
--- a/tools/libs/light/libxl_internal.h
+++ b/tools/libs/light/libxl_internal.h
@@ -1734,6 +1734,8 @@ _hidden int libxl__pciback_dev_is_assigned(libxl__gc *gc,
_hidden int libxl__device_pci_assignable_add(libxl__gc *gc,
libxl_device_pci *pci,
int rebind);
+_hidden libxl__json_object *libxl__device_pci_get_qapi_json(libxl__gc *gc,
+ libxl_device_pci
*pci);
/* from libxl_dtdev */
diff --git a/tools/libs/light/libxl_pci.c b/tools/libs/light/libxl_pci.c
index 5551abe0a2..5004ca47d9 100644
--- a/tools/libs/light/libxl_pci.c
+++ b/tools/libs/light/libxl_pci.c
@@ -1098,16 +1098,10 @@ out:
pci_add_dm_done(egc, pas, rc); /* must be last */
}
-static void pci_add_qmp_device_add(libxl__egc *egc, pci_add_state *pas)
+libxl__json_object *libxl__device_pci_get_qapi_json(libxl__gc *gc,
+ libxl_device_pci *pci)
{
- STATE_AO_GC(pas->aodev->ao);
libxl__json_object *args = NULL;
- int rc;
-
- /* Convenience aliases */
- libxl_domid domid = pas->domid;
- libxl_device_pci *pci = &pas->pci;
- libxl__ev_qmp *const qmp = &pas->qmp;
libxl__qmp_param_add_string(gc, &args, "driver",
"xen-pci-passthrough");
@@ -1134,6 +1128,22 @@ static void pci_add_qmp_device_add(libxl__egc *egc,
pci_add_state *pas)
if (pci->permissive)
libxl__qmp_param_add_bool(gc, &args, "permissive", true);
+ return args;
+}
+
+static void pci_add_qmp_device_add(libxl__egc *egc, pci_add_state *pas)
+{
+ STATE_AO_GC(pas->aodev->ao);
+ libxl__json_object *args = NULL;
+ int rc = 0;
+
+ /* Convenience aliases */
+ libxl_domid domid = pas->domid;
+ libxl_device_pci *pci = &pas->pci;
+ libxl__ev_qmp *const qmp = &pas->qmp;
+
+ args = libxl__device_pci_get_qapi_json(gc, pci);
+
qmp->ao = pas->aodev->ao;
qmp->domid = domid;
qmp->payload_fd = -1;
--
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 |