diff options
author | Anthony PERARD <anthony.perard@citrix.com> | 2011-11-04 15:34:50 +0000 |
---|---|---|
committer | Anthony PERARD <anthony.perard@citrix.com> | 2011-11-04 15:34:50 +0000 |
commit | 2396de148ad314ac8cb5653891f2f2bd2cc6d395 (patch) | |
tree | e19d51bdcb0cc40ef4a16de4fb38957fead51e75 /tools/libxl/libxl_qmp.c | |
parent | 8d1277c729aea7e682ec44307ef5d682ff781154 (diff) | |
download | xen-2396de148ad314ac8cb5653891f2f2bd2cc6d395.tar.gz xen-2396de148ad314ac8cb5653891f2f2bd2cc6d395.tar.bz2 xen-2396de148ad314ac8cb5653891f2f2bd2cc6d395.zip |
libxl: libxl_qmp: Introduce libxl__qmp_pci_del
To remove a pci passthough device from QEMU (upstream).
Signed-off-by: Anthony PERARD <anthony.perard@citrix.com>
Committed-by: Ian Jackson <ian.jackson.citrix.com>
---
tools/libxl/libxl_internal.h | 2 ++
tools/libxl/libxl_qmp.c | 35 +++++++++++++++++++++++++++++++++++
2 files changed, 37 insertions(+), 0 deletions(-)
Diffstat (limited to 'tools/libxl/libxl_qmp.c')
-rw-r--r-- | tools/libxl/libxl_qmp.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/tools/libxl/libxl_qmp.c b/tools/libxl/libxl_qmp.c index 07ccf7a6e4..f749e011ba 100644 --- a/tools/libxl/libxl_qmp.c +++ b/tools/libxl/libxl_qmp.c @@ -713,6 +713,41 @@ int libxl__qmp_pci_add(libxl__gc *gc, int domid, libxl_device_pci *pcidev) return rc; } +static int qmp_device_del(libxl__gc *gc, int domid, char *id) +{ + libxl__qmp_handler *qmp = NULL; + flexarray_t *parameters = NULL; + libxl_key_value_list args = NULL; + int rc = 0; + + qmp = libxl__qmp_initialize(libxl__gc_owner(gc), domid); + if (!qmp) + return ERROR_FAIL; + + parameters = flexarray_make(2, 1); + flexarray_append_pair(parameters, "id", id); + args = libxl__xs_kvs_of_flexarray(gc, parameters, parameters->count); + if (!args) + return ERROR_NOMEM; + + rc = qmp_synchronous_send(qmp, "device_del", &args, + NULL, NULL, qmp->timeout); + + flexarray_free(parameters); + libxl__qmp_close(qmp); + return rc; +} + +int libxl__qmp_pci_del(libxl__gc *gc, int domid, libxl_device_pci *pcidev) +{ + char *id = NULL; + + id = libxl__sprintf(gc, PCI_PT_QDEV_ID, + pcidev->bus, pcidev->dev, pcidev->func); + + return qmp_device_del(gc, domid, id); +} + int libxl__qmp_initializations(libxl_ctx *ctx, uint32_t domid) { libxl__qmp_handler *qmp = NULL; |