[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen master] xl/libxl: add pvcalls support
commit 6bbcb226cebac90f8ce5ac901e000bfd3ad783c5 Author: Stefano Stabellini <sstabellini@xxxxxxxxxx> AuthorDate: Thu Mar 29 15:07:00 2018 -0700 Commit: Wei Liu <wei.liu2@xxxxxxxxxx> CommitDate: Fri Mar 30 12:51:55 2018 +0100 xl/libxl: add pvcalls support Add pvcalls support to libxl and xl. Create the appropriate pvcalls entries in xenstore. Signed-off-by: Stefano Stabellini <stefano@xxxxxxxxxxx> Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx> --- docs/misc/xenstore-paths.markdown | 9 +++++++++ tools/libxl/Makefile | 2 +- tools/libxl/libxl.h | 10 ++++++++++ tools/libxl/libxl_create.c | 4 ++++ tools/libxl/libxl_internal.h | 1 + tools/libxl/libxl_pvcalls.c | 37 ++++++++++++++++++++++++++++++++++++ tools/libxl/libxl_types.idl | 7 +++++++ tools/libxl/libxl_types_internal.idl | 1 + tools/xl/xl_parse.c | 37 +++++++++++++++++++++++++++++++++++- 9 files changed, 106 insertions(+), 2 deletions(-) diff --git a/docs/misc/xenstore-paths.markdown b/docs/misc/xenstore-paths.markdown index 7be2592c74..60c8b3fbe5 100644 --- a/docs/misc/xenstore-paths.markdown +++ b/docs/misc/xenstore-paths.markdown @@ -299,6 +299,11 @@ A virtual scsi device frontend. Described by A virtual usb device frontend. Described by [xen/include/public/io/usbif.h][USBIF] +#### ~/device/pvcalls/$DEVID/* [] + +Paravirtualized POSIX function calls frontend. Described by +[docs/misc/pvcalls.markdown][PVCALLS] + #### ~/console/* [] The primary PV console device. Described in [console.txt](console.txt) @@ -378,6 +383,10 @@ A PV SCSI backend. A PV USB backend. Described by [xen/include/public/io/usbif.h][USBIF] +#### ~/backend/pvcalls/$DOMID/$DEVID/* [] + +A PVCalls backend. Described in [docs/misc/pvcalls.markdown][PVCALLS]. + #### ~/backend/console/$DOMID/$DEVID/* [] A PV console backend. Described in [console.txt](console.txt) diff --git a/tools/libxl/Makefile b/tools/libxl/Makefile index 917ceb0e72..035e66e22e 100644 --- a/tools/libxl/Makefile +++ b/tools/libxl/Makefile @@ -140,7 +140,7 @@ LIBXL_OBJS = flexarray.o libxl.o libxl_create.o libxl_dm.o libxl_pci.o \ libxl_vtpm.o libxl_nic.o libxl_disk.o libxl_console.o \ libxl_cpupool.o libxl_mem.o libxl_sched.o libxl_tmem.o \ libxl_9pfs.o libxl_domain.o libxl_vdispl.o \ - $(LIBXL_OBJS-y) + libxl_pvcalls.o $(LIBXL_OBJS-y) LIBXL_OBJS += libxl_genid.o LIBXL_OBJS += _libxl_types.o libxl_flask.o _libxl_types_internal.o diff --git a/tools/libxl/libxl.h b/tools/libxl/libxl.h index edd244278a..bffc5a16c7 100644 --- a/tools/libxl/libxl.h +++ b/tools/libxl/libxl.h @@ -2013,6 +2013,16 @@ int libxl_device_p9_destroy(libxl_ctx *ctx, uint32_t domid, const libxl_asyncop_how *ao_how) LIBXL_EXTERNAL_CALLERS_ONLY; +/* pvcalls interface */ +int libxl_device_pvcallsif_remove(libxl_ctx *ctx, uint32_t domid, + libxl_device_pvcallsif *pvcallsif, + const libxl_asyncop_how *ao_how) + LIBXL_EXTERNAL_CALLERS_ONLY; +int libxl_device_pvcallsif_destroy(libxl_ctx *ctx, uint32_t domid, + libxl_device_pvcallsif *pvcallsif, + const libxl_asyncop_how *ao_how) + LIBXL_EXTERNAL_CALLERS_ONLY; + /* PCI Passthrough */ int libxl_device_pci_add(libxl_ctx *ctx, uint32_t domid, libxl_device_pci *pcidev, diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c index c498135246..c43f391801 100644 --- a/tools/libxl/libxl_create.c +++ b/tools/libxl/libxl_create.c @@ -1374,6 +1374,10 @@ static void domcreate_launch_dm(libxl__egc *egc, libxl__multidev *multidev, for (i = 0; i < d_config->num_p9s; i++) libxl__device_add(gc, domid, &libxl__p9_devtype, &d_config->p9s[i]); + for (i = 0; i < d_config->num_pvcallsifs; i++) + libxl__device_add(gc, domid, &libxl__pvcallsif_devtype, + &d_config->pvcallsifs[i]); + switch (d_config->c_info.type) { case LIBXL_DOMAIN_TYPE_HVM: { diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h index 8dd63319fc..897297f867 100644 --- a/tools/libxl/libxl_internal.h +++ b/tools/libxl/libxl_internal.h @@ -3650,6 +3650,7 @@ extern const struct libxl_device_type libxl__usbdev_devtype; extern const struct libxl_device_type libxl__pcidev_devtype; extern const struct libxl_device_type libxl__vdispl_devtype; extern const struct libxl_device_type libxl__p9_devtype; +extern const struct libxl_device_type libxl__pvcallsif_devtype; extern const struct libxl_device_type *device_type_tbl[]; diff --git a/tools/libxl/libxl_pvcalls.c b/tools/libxl/libxl_pvcalls.c new file mode 100644 index 0000000000..870318e716 --- /dev/null +++ b/tools/libxl/libxl_pvcalls.c @@ -0,0 +1,37 @@ +/* + * Copyright (C) 2018 Aporeto + * Author Stefano Stabellini <stefano@xxxxxxxxxxx> + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License as published + * by the Free Software Foundation; version 2.1 only. with the special + * exception on linking described in file LICENSE. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License for more details. + */ + +#include "libxl_osdeps.h" + +#include "libxl_internal.h" + +static int libxl__device_pvcallsif_setdefault(libxl__gc *gc, uint32_t domid, + libxl_device_pvcallsif *pvcallsif, + bool hotplug) +{ + return libxl__resolve_domid(gc, pvcallsif->backend_domname, + &pvcallsif->backend_domid); +} + +static LIBXL_DEFINE_UPDATE_DEVID(pvcallsif) +static LIBXL_DEFINE_DEVICE_FROM_TYPE(pvcallsif) + +#define libxl__add_pvcallsifs NULL +#define libxl_device_pvcallsif_list NULL +#define libxl_device_pvcallsif_compare NULL + +LIBXL_DEFINE_DEVICE_REMOVE(pvcallsif) + +DEFINE_DEVICE_TYPE_STRUCT(pvcallsif, PVCALLS); diff --git a/tools/libxl/libxl_types.idl b/tools/libxl/libxl_types.idl index dbb287d6fe..01ec1d1afa 100644 --- a/tools/libxl/libxl_types.idl +++ b/tools/libxl/libxl_types.idl @@ -790,6 +790,12 @@ libxl_device_p9 = Struct("device_p9", [ ("devid", libxl_devid), ]) +libxl_device_pvcallsif = Struct("device_pvcallsif", [ + ("backend_domid", libxl_domid), + ("backend_domname", string), + ("devid", libxl_devid), +]) + libxl_device_channel = Struct("device_channel", [ ("backend_domid", libxl_domid), ("backend_domname", string), @@ -829,6 +835,7 @@ libxl_domain_config = Struct("domain_config", [ ("vkbs", Array(libxl_device_vkb, "num_vkbs")), ("vtpms", Array(libxl_device_vtpm, "num_vtpms")), ("p9s", Array(libxl_device_p9, "num_p9s")), + ("pvcallsifs", Array(libxl_device_pvcallsif, "num_pvcallsifs")), ("vdispls", Array(libxl_device_vdispl, "num_vdispls")), # a channel manifests as a console with a name, # see docs/misc/channels.txt diff --git a/tools/libxl/libxl_types_internal.idl b/tools/libxl/libxl_types_internal.idl index d144dd628b..f2ff01718d 100644 --- a/tools/libxl/libxl_types_internal.idl +++ b/tools/libxl/libxl_types_internal.idl @@ -28,6 +28,7 @@ libxl__device_kind = Enumeration("device_kind", [ (11, "9PFS"), (12, "VDISPL"), (13, "VUART"), + (14, "PVCALLS"), ]) libxl__console_backend = Enumeration("console_backend", [ diff --git a/tools/xl/xl_parse.c b/tools/xl/xl_parse.c index 8b999825d2..e6c54483e0 100644 --- a/tools/xl/xl_parse.c +++ b/tools/xl/xl_parse.c @@ -860,7 +860,7 @@ void parse_config_data(const char *config_source, long l, vcpus = 0; XLU_Config *config; XLU_ConfigList *cpus, *vbds, *nics, *pcis, *cvfbs, *cpuids, *vtpms, - *usbctrls, *usbdevs, *p9devs, *vdispls; + *usbctrls, *usbdevs, *p9devs, *vdispls, *pvcallsifs_devs; XLU_ConfigList *channels, *ioports, *irqs, *iomem, *viridian, *dtdevs, *mca_caps; int num_ioports, num_irqs, num_iomem, num_cpus, num_viridian, num_mca_caps; @@ -1691,6 +1691,41 @@ void parse_config_data(const char *config_source, } } + if (!xlu_cfg_get_list(config, "pvcalls", &pvcallsifs_devs, 0, 0)) { + d_config->num_pvcallsifs = 0; + d_config->pvcallsifs = NULL; + while ((buf = xlu_cfg_get_listitem (pvcallsifs_devs, d_config->num_pvcallsifs)) != NULL) { + libxl_device_pvcallsif *pvcallsif; + char *backend = NULL; + char *p, *p2, *buf2; + pvcallsif = ARRAY_EXTEND_INIT(d_config->pvcallsifs, + d_config->num_pvcallsifs, + libxl_device_pvcallsif_init); + + buf2 = strdup(buf); + p = strtok(buf2, ","); + if (p) { + do { + while (*p == ' ') + ++p; + if ((p2 = strchr(p, '=')) == NULL) + break; + *p2 = '\0'; + if(!strcmp(p, "backend")) { + backend = strdup(p2 + 1); + } else { + fprintf(stderr, "Unknown string `%s' in pvcalls spec\n", p); + exit(1); + } + } while ((p = strtok(NULL, ",")) != NULL); + } + free(buf2); + + if (backend) + replace_string(&pvcallsif->backend_domname, backend); + } + } + if (!xlu_cfg_get_list (config, "channel", &channels, 0, 0)) { d_config->num_channels = 0; d_config->channels = NULL; -- generated by git-patchbot for /home/xen/git/xen.git#master _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxxx https://lists.xenproject.org/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |