[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

 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.