All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] libxl: use libxl__device_kind string to access device
@ 2017-10-05  9:30 Oleksandr Grytsov
  2017-10-05  9:30 ` [PATCH 1/4] libxl: use libxl__device_kind to get device XS entry Oleksandr Grytsov
                   ` (5 more replies)
  0 siblings, 6 replies; 12+ messages in thread
From: Oleksandr Grytsov @ 2017-10-05  9:30 UTC (permalink / raw)
  To: xen-devel; +Cc: ian.jackson, wei.liu2, Oleksandr Grytsov

From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>

In current implementation the path of device XS entry is created with
string from libxl__device_kind enum. But access to the device entry
usually done with hardcoded path. This is source of potential errors.
This patchset changes hardcoded device name in the XS path to string
representation of libxl__device_kind enum. Also it changes "type" field
in libxl__..._devtype structure to keep libxl__device_kind. It allows
to move some duplicated functions to macros.

Oleksandr Grytsov (4):
  libxl: use libxl__device_kind to get device XS entry
  libxl: use libxl__device_kind in LIBXL_DEFINE_UPDATE_DEVID
  libxl: move libxl__device_from_ to LIBXL_DEFINE_DEVICE_FROM_TYPE
  libxl: move ibxl_devid_to_device_... to LIBXL_DEFINE_DEVID_TO_DEVICE

 tools/libxl/libxl_9pfs.c      | 21 +++---------
 tools/libxl/libxl_colo_nic.c  |  6 ++--
 tools/libxl/libxl_console.c   | 36 +++++++++-----------
 tools/libxl/libxl_create.c    |  4 +--
 tools/libxl/libxl_device.c    | 10 +++---
 tools/libxl/libxl_disk.c      | 28 +++++++++++-----
 tools/libxl/libxl_domain.c    |  2 +-
 tools/libxl/libxl_internal.h  | 77 ++++++++++++++++++++++++++++++++++++-------
 tools/libxl/libxl_netbuffer.c |  6 ++--
 tools/libxl/libxl_nic.c       | 55 +++++++------------------------
 tools/libxl/libxl_pci.c       | 21 ++++++++----
 tools/libxl/libxl_usb.c       | 52 +++++++++++++++++++----------
 tools/libxl/libxl_vdispl.c    | 62 ++++++----------------------------
 tools/libxl/libxl_vkb.c       | 61 +++++-----------------------------
 tools/libxl/libxl_vsnd.c      | 62 ++++++----------------------------
 tools/libxl/libxl_vtpm.c      | 33 +++++++------------
 16 files changed, 222 insertions(+), 314 deletions(-)

-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* [PATCH 1/4] libxl: use libxl__device_kind to get device XS entry
  2017-10-05  9:30 [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
@ 2017-10-05  9:30 ` Oleksandr Grytsov
  2017-10-31 10:21   ` Wei Liu
  2017-10-05  9:30 ` [PATCH 2/4] libxl: use libxl__device_kind in LIBXL_DEFINE_UPDATE_DEVID Oleksandr Grytsov
                   ` (4 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Oleksandr Grytsov @ 2017-10-05  9:30 UTC (permalink / raw)
  To: xen-devel; +Cc: ian.jackson, wei.liu2, Oleksandr Grytsov

From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>

On adding to XS name of device is taken from
libxl__device_kind enum. On getting device from XS
the name is hardcoded. It leads to potential
mistmatch errors. The patch is using libxl__device_kind
everywere to have one source of device name.

Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
---
 tools/libxl/libxl_9pfs.c      |  2 +-
 tools/libxl/libxl_colo_nic.c  |  6 ++++--
 tools/libxl/libxl_console.c   | 18 ++++++++++------
 tools/libxl/libxl_create.c    |  4 ++--
 tools/libxl/libxl_device.c    |  3 ++-
 tools/libxl/libxl_disk.c      | 28 ++++++++++++++++--------
 tools/libxl/libxl_domain.c    |  2 +-
 tools/libxl/libxl_internal.h  | 12 +++++------
 tools/libxl/libxl_netbuffer.c |  6 ++++--
 tools/libxl/libxl_nic.c       | 16 +++++++++-----
 tools/libxl/libxl_pci.c       | 21 ++++++++++++------
 tools/libxl/libxl_usb.c       | 50 ++++++++++++++++++++++++++++---------------
 tools/libxl/libxl_vdispl.c    |  9 +++++---
 tools/libxl/libxl_vkb.c       |  9 +++++---
 tools/libxl/libxl_vsnd.c      |  9 +++++---
 tools/libxl/libxl_vtpm.c      | 12 +++++++----
 16 files changed, 135 insertions(+), 72 deletions(-)

diff --git a/tools/libxl/libxl_9pfs.c b/tools/libxl/libxl_9pfs.c
index 9db887b..c3dd786 100644
--- a/tools/libxl/libxl_9pfs.c
+++ b/tools/libxl/libxl_9pfs.c
@@ -58,7 +58,7 @@ static int libxl__set_xenstore_p9(libxl__gc *gc, uint32_t domid,
 
 LIBXL_DEFINE_DEVICE_REMOVE(p9)
 
-DEFINE_DEVICE_TYPE_STRUCT(p9,
+DEFINE_DEVICE_TYPE_STRUCT(p9, 9PFS,
     .skip_attach = 1,
     .set_xenstore_config = (device_set_xenstore_config_fn_t)
                            libxl__set_xenstore_p9,
diff --git a/tools/libxl/libxl_colo_nic.c b/tools/libxl/libxl_colo_nic.c
index a164e22..71a17fd 100644
--- a/tools/libxl/libxl_colo_nic.c
+++ b/tools/libxl/libxl_colo_nic.c
@@ -60,8 +60,10 @@ static const char *get_vifname(libxl__checkpoint_device *dev,
     /* Convenience aliases */
     const uint32_t domid = dev->cds->domid;
 
-    path = GCSPRINTF("%s/backend/vif/%d/%d/vifname",
-                     libxl__xs_get_dompath(gc, 0), domid, nic->devid);
+    path = GCSPRINTF("%s/backend/%s/%d/%d/vifname",
+                     libxl__xs_get_dompath(gc, 0),
+                     libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VIF),
+                     domid, nic->devid);
     rc = libxl__xs_read_checked(gc, XBT_NULL, path, &vifname);
     if (!rc && !vifname) {
         vifname = libxl__device_nic_devname(gc, domid,
diff --git a/tools/libxl/libxl_console.c b/tools/libxl/libxl_console.c
index 09facaf..b7c0d34 100644
--- a/tools/libxl/libxl_console.c
+++ b/tools/libxl/libxl_console.c
@@ -37,7 +37,9 @@ static int libxl__console_tty_path(libxl__gc *gc, uint32_t domid, int cons_num,
         if (cons_num == 0)
             *tty_path = GCSPRINTF("%s/console/tty", dom_path);
         else
-            *tty_path = GCSPRINTF("%s/device/console/%d/tty", dom_path,
+            *tty_path = GCSPRINTF("%s/device/%s/%d/tty", dom_path,
+                                  libxl__device_kind_to_string(
+                                  LIBXL__DEVICE_KIND_CONSOLE),
                                   cons_num);
         rc = 0;
         break;
@@ -450,8 +452,10 @@ static int libxl__append_channel_list(libxl__gc *gc,
     libxl_device_channel *next = NULL;
     int rc = 0, i;
 
-    libxl_dir_path = GCSPRINTF("%s/device/console",
-                               libxl__xs_libxl_path(gc, domid));
+    libxl_dir_path = GCSPRINTF("%s/device/%s",
+                               libxl__xs_libxl_path(gc, domid),
+                               libxl__device_kind_to_string(
+                               LIBXL__DEVICE_KIND_CONSOLE));
     dir = libxl__xs_directory(gc, XBT_NULL, libxl_dir_path, &n);
     if (!dir || !n)
       goto out;
@@ -523,10 +527,12 @@ int libxl_device_channel_getinfo(libxl_ctx *ctx, uint32_t domid,
     dompath = libxl__xs_get_dompath(gc, domid);
     channelinfo->devid = channel->devid;
 
-    fe_path = GCSPRINTF("%s/device/console/%d", dompath,
+    fe_path = GCSPRINTF("%s/device/%s/%d", dompath,
+                        libxl__device_kind_to_string(LIBXL__DEVICE_KIND_CONSOLE),
                         channelinfo->devid + 1);
-    libxl_path = GCSPRINTF("%s/device/console/%d",
+    libxl_path = GCSPRINTF("%s/device/%s/%d",
                            libxl__xs_libxl_path(gc, domid),
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_CONSOLE),
                            channelinfo->devid + 1);
     channelinfo->backend = xs_read(ctx->xsh, XBT_NULL,
                                    GCSPRINTF("%s/backend", libxl_path), NULL);
@@ -682,7 +688,7 @@ static int libxl__set_xenstore_vfb(libxl__gc *gc, uint32_t domid,
 /* vfb */
 LIBXL_DEFINE_DEVICE_REMOVE(vfb)
 
-DEFINE_DEVICE_TYPE_STRUCT(vfb,
+DEFINE_DEVICE_TYPE_STRUCT(vfb, VFB,
     .skip_attach = 1,
     .set_xenstore_config = (device_set_xenstore_config_fn_t)
                            libxl__set_xenstore_vfb,
diff --git a/tools/libxl/libxl_create.c b/tools/libxl/libxl_create.c
index 7268f7f..31df0c6 100644
--- a/tools/libxl/libxl_create.c
+++ b/tools/libxl/libxl_create.c
@@ -1442,7 +1442,7 @@ out:
 #define libxl__device_from_dtdev NULL
 #define libxl__device_dtdev_setdefault NULL
 #define libxl__device_dtdev_update_devid NULL
-static DEFINE_DEVICE_TYPE_STRUCT(dtdev);
+static DEFINE_DEVICE_TYPE_STRUCT(dtdev, NONE);
 
 const struct libxl_device_type *device_type_tbl[] = {
     &libxl__disk_devtype,
@@ -1469,7 +1469,7 @@ static void domcreate_attach_devices(libxl__egc *egc,
 
     if (ret) {
         LOGD(ERROR, domid, "unable to add %s devices",
-             device_type_tbl[dcs->device_type_idx]->type);
+             libxl__device_kind_to_string(device_type_tbl[dcs->device_type_idx]->type));
         goto error_out;
     }
 
diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
index 46ca5a4..7aaf493 100644
--- a/tools/libxl/libxl_device.c
+++ b/tools/libxl/libxl_device.c
@@ -2002,7 +2002,8 @@ void *libxl__device_list(libxl__gc *gc, const struct libxl_device_type *dt,
     *num = 0;
 
     libxl_path = GCSPRINTF("%s/device/%s",
-                           libxl__xs_libxl_path(gc, domid), dt->entry);
+                           libxl__xs_libxl_path(gc, domid),
+                           libxl__device_kind_to_string(dt->type));
 
     dir = libxl__xs_directory(gc, XBT_NULL, libxl_path, &ndirs);
 
diff --git a/tools/libxl/libxl_disk.c b/tools/libxl/libxl_disk.c
index 263cb56..13d3646 100644
--- a/tools/libxl/libxl_disk.c
+++ b/tools/libxl/libxl_disk.c
@@ -97,12 +97,14 @@ int libxl_evenable_disk_eject(libxl_ctx *ctx, uint32_t guest_domid,
 
     int devid = libxl__device_disk_dev_number(vdev, NULL, NULL);
 
-    path = GCSPRINTF("%s/device/vbd/%d/eject",
+    path = GCSPRINTF("%s/device/%s/%d/eject",
+                 libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VBD),
                  libxl__xs_get_dompath(gc, domid),
                  devid);
     if (!path) { rc = ERROR_NOMEM; goto out; }
 
-    const char *libxl_path = GCSPRINTF("%s/device/vbd/%d",
+    const char *libxl_path = GCSPRINTF("%s/device/%s/%d",
+                                 libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VBD),
                                  libxl__xs_libxl_path(gc, domid),
                                  devid);
     evg->be_ptr_path = libxl__sprintf(NOGC, "%s/backend", libxl_path);
@@ -614,7 +616,9 @@ int libxl_vdev_to_device_disk(libxl_ctx *ctx, uint32_t domid,
     if (!dom_xl_path) {
         goto out;
     }
-    libxl_path = GCSPRINTF("%s/device/vbd/%d", dom_xl_path, devid);
+    libxl_path = GCSPRINTF("%s/device/%s/%d", dom_xl_path,
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VBD),
+                           devid);
 
     rc = libxl__disk_from_xenstore(gc, libxl_path, devid, disk);
 out:
@@ -636,9 +640,13 @@ int libxl_device_disk_getinfo(libxl_ctx *ctx, uint32_t domid,
     diskinfo->devid = libxl__device_disk_dev_number(disk->vdev, NULL, NULL);
 
     /* tap devices entries in xenstore are written as vbd devices. */
-    fe_path = GCSPRINTF("%s/device/vbd/%d", dompath, diskinfo->devid);
-    libxl_path = GCSPRINTF("%s/device/vbd/%d",
-                           libxl__xs_libxl_path(gc, domid), diskinfo->devid);
+    fe_path = GCSPRINTF("%s/device/%s/%d", dompath,
+                        libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VBD),
+                        diskinfo->devid);
+    libxl_path = GCSPRINTF("%s/device/%s/%d",
+                           libxl__xs_libxl_path(gc, domid),
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VBD),
+                           diskinfo->devid);
     diskinfo->backend = xs_read(ctx->xsh, XBT_NULL,
                                 GCSPRINTF("%s/backend", libxl_path), NULL);
     if (!diskinfo->backend) {
@@ -893,8 +901,10 @@ static char * libxl__alloc_vdev(libxl__gc *gc, void *get_vdev_user,
         if (devid < 0)
             return NULL;
         if (libxl__xs_read(gc, t,
-                    GCSPRINTF("%s/device/vbd/%d/backend",
-                        libxl_dom_path, devid)) == NULL) {
+                    GCSPRINTF("%s/device/%s/%d/backend",
+                        libxl_dom_path,
+                        libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VBD),
+                        devid)) == NULL) {
             if (errno == ENOENT)
                 return libxl__devid_to_vdev(gc, devid);
             else
@@ -1187,7 +1197,7 @@ LIBXL_DEFINE_DEVICE_LIST(disk)
 
 #define libxl__device_disk_update_devid NULL
 
-DEFINE_DEVICE_TYPE_STRUCT_X(disk, disk, vbd,
+DEFINE_DEVICE_TYPE_STRUCT(disk, VBD,
     .merge       = libxl_device_disk_merge,
     .dm_needed   = libxl_device_disk_dm_needed,
     .from_xenstore = (device_from_xenstore_fn_t)libxl__disk_from_xenstore,
diff --git a/tools/libxl/libxl_domain.c b/tools/libxl/libxl_domain.c
index 0434ab9..ef1a092 100644
--- a/tools/libxl/libxl_domain.c
+++ b/tools/libxl/libxl_domain.c
@@ -1686,7 +1686,7 @@ int libxl_retrieve_domain_configuration(libxl_ctx *ctx, uint32_t domid,
             p = libxl__device_list(gc, dt, domid, &num);
             if (p == NULL) {
                 LOGD(DEBUG, domid, "No %s from xenstore",
-                     dt->type);
+                     libxl__device_kind_to_string(dt->type));
             }
             devs = libxl__device_type_get_ptr(dt, d_config);
 
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 6b403dc..10ad52f 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -3500,8 +3500,7 @@ typedef int (*device_set_xenstore_config_fn_t)(libxl__gc *, uint32_t, void *,
                                                flexarray_t *);
 
 struct libxl_device_type {
-    char *type;
-    char *entry;
+    libxl__device_kind type;
     int skip_attach;   /* Skip entry in domcreate_attach_devices() if 1 */
     int ptr_offset;    /* Offset of device array ptr in libxl_domain_config */
     int num_offset;    /* Offset of # of devices in libxl_domain_config */
@@ -3521,10 +3520,9 @@ struct libxl_device_type {
     device_set_xenstore_config_fn_t set_xenstore_config;
 };
 
-#define DEFINE_DEVICE_TYPE_STRUCT_X(name, sname, sentry, ...)                  \
+#define DEFINE_DEVICE_TYPE_STRUCT_X(name, sname, kind, ...)                    \
     const struct libxl_device_type libxl__ ## name ## _devtype = {             \
-        .type          = #sname,                                               \
-        .entry         = #sentry,                                              \
+        .type          = LIBXL__DEVICE_KIND_ ## kind,                       \
         .ptr_offset    = offsetof(libxl_domain_config, name ## s),             \
         .num_offset    = offsetof(libxl_domain_config, num_ ## name ## s),     \
         .dev_elem_size = sizeof(libxl_device_ ## sname),                       \
@@ -3543,8 +3541,8 @@ struct libxl_device_type {
         __VA_ARGS__                                                            \
     }
 
-#define DEFINE_DEVICE_TYPE_STRUCT(name, ...)                                   \
-    DEFINE_DEVICE_TYPE_STRUCT_X(name, name, name, __VA_ARGS__)
+#define DEFINE_DEVICE_TYPE_STRUCT(name, kind, ...)                             \
+    DEFINE_DEVICE_TYPE_STRUCT_X(name, name, kind, __VA_ARGS__)
 
 static inline void **libxl__device_type_get_ptr(
     const struct libxl_device_type *dt, const libxl_domain_config *d_config)
diff --git a/tools/libxl/libxl_netbuffer.c b/tools/libxl/libxl_netbuffer.c
index 323cdd8..6690ce5 100644
--- a/tools/libxl/libxl_netbuffer.c
+++ b/tools/libxl/libxl_netbuffer.c
@@ -126,8 +126,10 @@ static const char *get_vifname(libxl__checkpoint_device *dev,
     /* Convenience aliases */
     const uint32_t domid = dev->cds->domid;
 
-    path = GCSPRINTF("%s/backend/vif/%d/%d/vifname",
-                     libxl__xs_get_dompath(gc, 0), domid, nic->devid);
+    path = GCSPRINTF("%s/backend/%s/%d/%d/vifname",
+                     libxl__xs_get_dompath(gc, 0),
+                     libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VIF),
+                     domid, nic->devid);
     rc = libxl__xs_read_checked(gc, XBT_NULL, path, &vifname);
     if (!rc && !vifname) {
         vifname = libxl__device_nic_devname(gc, domid,
diff --git a/tools/libxl/libxl_nic.c b/tools/libxl/libxl_nic.c
index 9daecf7..44d0fa7 100644
--- a/tools/libxl/libxl_nic.c
+++ b/tools/libxl/libxl_nic.c
@@ -409,7 +409,9 @@ int libxl_devid_to_device_nic(libxl_ctx *ctx, uint32_t domid,
     if (!libxl_dom_path)
         goto out;
 
-    libxl_path = GCSPRINTF("%s/device/vif/%d", libxl_dom_path, devid);
+    libxl_path = GCSPRINTF("%s/device/%s/%d", libxl_dom_path,
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VIF),
+                           devid);
 
     rc = libxl__nic_from_xenstore(gc, libxl_path, devid, nic);
     if (rc) goto out;
@@ -449,9 +451,13 @@ int libxl_device_nic_getinfo(libxl_ctx *ctx, uint32_t domid,
     dompath = libxl__xs_get_dompath(gc, domid);
     nicinfo->devid = nic->devid;
 
-    nicpath = GCSPRINTF("%s/device/vif/%d", dompath, nicinfo->devid);
-    libxl_path = GCSPRINTF("%s/device/vif/%d",
-                           libxl__xs_libxl_path(gc, domid), nicinfo->devid);
+    nicpath = GCSPRINTF("%s/device/%s/%d", dompath,
+                        libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VIF),
+                        nicinfo->devid);
+    libxl_path = GCSPRINTF("%s/device/%s/%d",
+                           libxl__xs_libxl_path(gc, domid),
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VIF),
+                           nicinfo->devid);
     nicinfo->backend = xs_read(ctx->xsh, XBT_NULL,
                                 GCSPRINTF("%s/backend", libxl_path), NULL);
     if (!nicinfo->backend) {
@@ -540,7 +546,7 @@ LIBXL_DEFINE_DEVICE_ADD(nic)
 LIBXL_DEFINE_DEVICES_ADD(nic)
 LIBXL_DEFINE_DEVICE_REMOVE(nic)
 
-DEFINE_DEVICE_TYPE_STRUCT_X(nic, nic, vif,
+DEFINE_DEVICE_TYPE_STRUCT(nic, VIF,
     .update_config = libxl_device_nic_update_config,
     .from_xenstore = (device_from_xenstore_fn_t)libxl__nic_from_xenstore,
     .set_xenstore_config = (device_set_xenstore_config_fn_t)
diff --git a/tools/libxl/libxl_pci.c b/tools/libxl/libxl_pci.c
index 88a55ce..f83ac32 100644
--- a/tools/libxl/libxl_pci.c
+++ b/tools/libxl/libxl_pci.c
@@ -125,7 +125,9 @@ static int libxl__device_pci_add_xenstore(libxl__gc *gc, uint32_t domid, libxl_d
     libxl_device_pci_init(&pcidev_saved);
     libxl_device_pci_copy(CTX, &pcidev_saved, pcidev);
 
-    be_path = GCSPRINTF("%s/backend/pci/%d/0", libxl__xs_get_dompath(gc, 0), domid);
+    be_path = GCSPRINTF("%s/backend/%s/%d/0", libxl__xs_get_dompath(gc, 0),
+                        libxl__device_kind_to_string(LIBXL__DEVICE_KIND_PCI),
+                        domid);
     num_devs = libxl__xs_read(gc, XBT_NULL, GCSPRINTF("%s/num_devs", be_path));
     if (!num_devs)
         return libxl__create_pci_backend(gc, domid, pcidev, 1);
@@ -195,7 +197,9 @@ static int libxl__device_pci_remove_xenstore(libxl__gc *gc, uint32_t domid, libx
     int num, i, j;
     xs_transaction_t t;
 
-    be_path = GCSPRINTF("%s/backend/pci/%d/0", libxl__xs_get_dompath(gc, 0), domid);
+    be_path = GCSPRINTF("%s/backend/%s/%d/0", libxl__xs_get_dompath(gc, 0),
+                        libxl__device_kind_to_string(LIBXL__DEVICE_KIND_PCI),
+                        domid);
     num_devs_path = GCSPRINTF("%s/num_devs", be_path);
     num_devs = libxl__xs_read(gc, XBT_NULL, num_devs_path);
     if (!num_devs)
@@ -315,14 +319,17 @@ static int get_all_assigned_devices(libxl__gc *gc, libxl_device_pci **list, int
     for(i = 0; i < nd; i++) {
         char *path, *num_devs;
 
-        path = GCSPRINTF("/local/domain/0/backend/pci/%s/0/num_devs", domlist[i]);
+        path = GCSPRINTF("/local/domain/0/backend/%s/%s/0/num_devs",
+                         libxl__device_kind_to_string(LIBXL__DEVICE_KIND_PCI),
+                         domlist[i]);
         num_devs = libxl__xs_read(gc, XBT_NULL, path);
         if ( num_devs ) {
             int ndev = atoi(num_devs), j;
             char *devpath, *bdf;
 
             for(j = 0; j < ndev; j++) {
-                devpath = GCSPRINTF("/local/domain/0/backend/pci/%s/0/dev-%u",
+                devpath = GCSPRINTF("/local/domain/0/backend/%s/%s/0/dev-%u",
+                                    libxl__device_kind_to_string(LIBXL__DEVICE_KIND_PCI),
                                     domlist[i], j);
                 bdf = libxl__xs_read(gc, XBT_NULL, devpath);
                 if ( bdf ) {
@@ -1589,7 +1596,9 @@ libxl_device_pci *libxl_device_pci_list(libxl_ctx *ctx, uint32_t domid, int *num
 
     *num = 0;
 
-    be_path = GCSPRINTF("%s/backend/pci/%d/0", libxl__xs_get_dompath(gc, 0), domid);
+    be_path = GCSPRINTF("%s/backend/%s/%d/0", libxl__xs_get_dompath(gc, 0),
+                        libxl__device_kind_to_string(LIBXL__DEVICE_KIND_PCI),
+                        domid);
     num_devs = libxl__xs_read(gc, XBT_NULL, GCSPRINTF("%s/num_devs", be_path));
     if (!num_devs)
         goto out;
@@ -1682,7 +1691,7 @@ static int libxl_device_pci_compare(libxl_device_pci *d1,
 
 #define libxl__device_pci_update_devid NULL
 
-DEFINE_DEVICE_TYPE_STRUCT_X(pcidev, pci, pci);
+DEFINE_DEVICE_TYPE_STRUCT_X(pcidev, pci, PCI);
 
 /*
  * Local variables:
diff --git a/tools/libxl/libxl_usb.c b/tools/libxl/libxl_usb.c
index 1d5a243..6ce6957 100644
--- a/tools/libxl/libxl_usb.c
+++ b/tools/libxl/libxl_usb.c
@@ -310,8 +310,10 @@ static void libxl__device_usbctrl_del_xenstore(libxl__gc *gc, uint32_t domid,
     xs_transaction_t t = XBT_NULL;
     int rc;
 
-    libxl_path = GCSPRINTF("%s/device/vusb/%d",
-                           libxl__xs_libxl_path(gc, domid), usbctrl->devid);
+    libxl_path = GCSPRINTF("%s/device/%s/%d",
+                           libxl__xs_libxl_path(gc, domid),
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VUSB),
+                           usbctrl->devid);
     be_path = vusb_be_from_xs_libxl_type(gc, libxl_path, usbctrl->type);
 
     for (;;) {
@@ -574,8 +576,9 @@ libxl_device_usbctrl_list(libxl_ctx *ctx, uint32_t domid, int *num)
 
     *num = 0;
 
-    libxl_vusbs_path = GCSPRINTF("%s/device/vusb",
-                     libxl__xs_libxl_path(gc, domid));
+    libxl_vusbs_path = GCSPRINTF("%s/device/%s",
+                     libxl__xs_libxl_path(gc, domid),
+                     libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VUSB));
     entry = libxl__xs_directory(gc, XBT_NULL, libxl_vusbs_path, &nentries);
 
     if (entry && nentries) {
@@ -667,13 +670,17 @@ int libxl_device_usbctrl_getinfo(libxl_ctx *ctx, uint32_t domid,
     })
 
     libxl_dom_path = libxl__xs_libxl_path(gc, domid);
-    libxl_path = GCSPRINTF("%s/device/vusb/%d", libxl_dom_path, usbctrl->devid);
+    libxl_path = GCSPRINTF("%s/device/%s/%d", libxl_dom_path,
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VUSB),
+                           usbctrl->devid);
     libxl_usbctrl_type_from_string(READ_SUBPATH(libxl_path, "type"),
                                    &usbctrlinfo->type);
 
     if (usbctrlinfo->type != LIBXL_USBCTRL_TYPE_DEVICEMODEL) {
         dompath = libxl__xs_get_dompath(gc, domid);
-        fe_path = GCSPRINTF("%s/device/vusb/%d", dompath, usbctrl->devid);
+        fe_path = GCSPRINTF("%s/device/%s/%d", dompath,
+                            libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VUSB),
+                            usbctrl->devid);
         be_path = READ_SUBPATH(libxl_path, "backend");
         usbctrlinfo->backend = libxl__strdup(NOGC, be_path);
         rc = libxl__backendpath_parse_domid(gc, be_path,
@@ -821,8 +828,9 @@ static int get_assigned_devices(libxl__gc *gc,
         unsigned int nc = 0;
         uint32_t domid = atoi(domlist[i]);
 
-        libxl_vusbs_path = GCSPRINTF("%s/device/vusb",
-                                     libxl__xs_libxl_path(gc, domid));
+        libxl_vusbs_path = GCSPRINTF("%s/device/%s",
+                                     libxl__xs_libxl_path(gc, domid),
+                                     libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VUSB));
         usbctrls = libxl__xs_directory(gc, XBT_NULL,
                                        libxl_vusbs_path, &nc);
 
@@ -900,8 +908,10 @@ libxl__device_usbdev_list_for_usbctrl(libxl__gc *gc,
     *usbdevs = NULL;
     *num = 0;
 
-    libxl_path = GCSPRINTF("%s/device/vusb/%d",
-                           libxl__xs_libxl_path(gc, domid), usbctrl);
+    libxl_path = GCSPRINTF("%s/device/%s/%d",
+                           libxl__xs_libxl_path(gc, domid),
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VUSB),
+                           usbctrl);
 
     be_path = vusb_be_from_xs_libxl(gc, libxl_path);
     if (!be_path) {
@@ -959,8 +969,10 @@ libxl_device_usbdev_list(libxl_ctx *ctx, uint32_t domid, int *num)
 
     *num = 0;
 
-    libxl_vusbs_path = GCSPRINTF("%s/device/vusb",
-                                 libxl__xs_libxl_path(gc, domid));
+    libxl_vusbs_path = GCSPRINTF("%s/device/%s",
+                                 libxl__xs_libxl_path(gc, domid),
+                                 libxl__device_kind_to_string(
+                                 LIBXL__DEVICE_KIND_VUSB));
     usbctrls = libxl__xs_directory(gc, XBT_NULL, libxl_vusbs_path, &nc);
 
     for (i = 0; i < nc; i++) {
@@ -990,7 +1002,8 @@ static char *vusb_get_port_path(libxl__gc *gc, uint32_t domid,
     char *path;
 
     if (type == LIBXL_USBCTRL_TYPE_DEVICEMODEL)
-        path = GCSPRINTF("%s/device/vusb", libxl__xs_libxl_path(gc, domid));
+        path = GCSPRINTF("%s/device/%s", libxl__xs_libxl_path(gc, domid),
+                         libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VUSB));
     else
         path = GCSPRINTF("%s/backend/%s/%d",
                          libxl__xs_get_dompath(gc, LIBXL_TOOLSTACK_DOMID),
@@ -1096,8 +1109,9 @@ static int libxl__device_usbdev_setdefault(libxl__gc *gc,
         /* A controller was specified; look it up */
         const char *libxl_path, *be_path, *tmp;
 
-        libxl_path = GCSPRINTF("%s/device/vusb/%d",
+        libxl_path = GCSPRINTF("%s/device/%s/%d",
                             libxl__xs_libxl_path(gc, domid),
+                            libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VUSB),
                             usbdev->ctrl);
 
         be_path = vusb_be_from_xs_libxl(gc, libxl_path);
@@ -1893,7 +1907,9 @@ int libxl_ctrlport_to_device_usbdev(libxl_ctx *ctx,
 
     libxl_dom_path = libxl__xs_libxl_path(gc, domid);
 
-    libxl_path = GCSPRINTF("%s/device/vusb/%d", libxl_dom_path, ctrl);
+    libxl_path = GCSPRINTF("%s/device/%s/%d", libxl_dom_path,
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VUSB),
+                           ctrl);
     be_path = vusb_be_from_xs_libxl(gc, libxl_path);
     if (!be_path) {
         rc = ERROR_FAIL;
@@ -1962,14 +1978,14 @@ void libxl_device_usbdev_list_free(libxl_device_usbdev *list, int nr)
 
 #define libxl__device_usbctrl_update_devid NULL
 
-DEFINE_DEVICE_TYPE_STRUCT(usbctrl,
+DEFINE_DEVICE_TYPE_STRUCT(usbctrl, VUSB,
     .dm_needed = libxl_device_usbctrl_dm_needed
 );
 
 #define libxl__device_from_usbdev NULL
 #define libxl__device_usbdev_update_devid NULL
 
-DEFINE_DEVICE_TYPE_STRUCT(usbdev);
+DEFINE_DEVICE_TYPE_STRUCT(usbdev, VUSB);
 
 /*
  * Local variables:
diff --git a/tools/libxl/libxl_vdispl.c b/tools/libxl/libxl_vdispl.c
index e61ef2d..31409a4 100644
--- a/tools/libxl/libxl_vdispl.c
+++ b/tools/libxl/libxl_vdispl.c
@@ -176,9 +176,12 @@ int libxl_device_vdispl_getinfo(libxl_ctx *ctx, uint32_t domid,
     dompath = libxl__xs_get_dompath(gc, domid);
     info->devid = vdispl->devid;
 
-    devpath = GCSPRINTF("%s/device/vdispl/%d", dompath, info->devid);
-    libxl_path = GCSPRINTF("%s/device/vdispl/%d",
+    devpath = GCSPRINTF("%s/device/%s/%d", dompath,
+                        libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VDISPL),
+                        info->devid);
+    libxl_path = GCSPRINTF("%s/device/%s/%d",
                            libxl__xs_libxl_path(gc, domid),
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VDISPL),
                            info->devid);
     info->backend = xs_read(ctx->xsh, XBT_NULL,
                             GCSPRINTF("%s/backend", libxl_path),
@@ -249,7 +252,7 @@ LIBXL_DEFINE_DEVICE_REMOVE(vdispl)
 static LIBXL_DEFINE_UPDATE_DEVID(vdispl, "vdispl")
 LIBXL_DEFINE_DEVICE_LIST(vdispl)
 
-DEFINE_DEVICE_TYPE_STRUCT(vdispl,
+DEFINE_DEVICE_TYPE_STRUCT(vdispl, VDISPL,
     .update_config = (device_update_config_fn_t)libxl__update_config_vdispl,
     .from_xenstore = (device_from_xenstore_fn_t)libxl__vdispl_from_xenstore,
     .set_xenstore_config = (device_set_xenstore_config_fn_t)
diff --git a/tools/libxl/libxl_vkb.c b/tools/libxl/libxl_vkb.c
index 276cc8a..1cd7feb 100644
--- a/tools/libxl/libxl_vkb.c
+++ b/tools/libxl/libxl_vkb.c
@@ -122,9 +122,12 @@ int libxl_device_vkb_getinfo(libxl_ctx *ctx, uint32_t domid,
     dompath = libxl__xs_get_dompath(gc, domid);
     info->devid = vkb->devid;
 
-    devpath = GCSPRINTF("%s/device/vkbd/%d", dompath, info->devid);
-    libxl_path = GCSPRINTF("%s/device/vkbd/%d",
+    devpath = GCSPRINTF("%s/device/%s/%d", dompath,
+                        libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VKBD),
+                        info->devid);
+    libxl_path = GCSPRINTF("%s/device/%s/%d",
                            libxl__xs_libxl_path(gc, domid),
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VKBD),
                            info->devid);
     info->backend = xs_read(ctx->xsh, XBT_NULL,
                             GCSPRINTF("%s/backend", libxl_path),
@@ -165,7 +168,7 @@ static LIBXL_DEFINE_UPDATE_DEVID(vkb, "vkbd")
 LIBXL_DEFINE_DEVICE_LIST(vkb)
 LIBXL_DEFINE_DEVICE_REMOVE(vkb)
 
-DEFINE_DEVICE_TYPE_STRUCT_X(vkb, vkb, vkbd,
+DEFINE_DEVICE_TYPE_STRUCT(vkb, VKBD,
     .skip_attach = 1,
     .dm_needed   = (device_dm_needed_fn_t)libxl__device_vkb_dm_needed,
     .from_xenstore = (device_from_xenstore_fn_t)libxl__vkb_from_xenstore
diff --git a/tools/libxl/libxl_vsnd.c b/tools/libxl/libxl_vsnd.c
index 0e7b29c..f81a9e2 100644
--- a/tools/libxl/libxl_vsnd.c
+++ b/tools/libxl/libxl_vsnd.c
@@ -573,11 +573,14 @@ int libxl_device_vsnd_getinfo(libxl_ctx *ctx, uint32_t domid,
     dompath = libxl__xs_get_dompath(gc, domid);
     info->devid = vsnd->devid;
 
-    devpath = GCSPRINTF("%s/device/%s/%d", dompath, libxl__vsnd_devtype.entry,
+    devpath = GCSPRINTF("%s/device/%s/%d", dompath,
+                                           libxl__device_kind_to_string(
+                                           LIBXL__DEVICE_KIND_VSND),
                                            info->devid);
     libxl_path = GCSPRINTF("%s/device/%s/%d",
                            libxl__xs_libxl_path(gc, domid),
-                           libxl__vsnd_devtype.entry, info->devid);
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VSND),
+                           info->devid);
 
     info->backend = xs_read(ctx->xsh, XBT_NULL,
                             GCSPRINTF("%s/backend", libxl_path), NULL);
@@ -644,7 +647,7 @@ LIBXL_DEFINE_DEVICE_REMOVE(vsnd)
 static LIBXL_DEFINE_UPDATE_DEVID(vsnd, "vsnd")
 LIBXL_DEFINE_DEVICE_LIST(vsnd)
 
-DEFINE_DEVICE_TYPE_STRUCT(vsnd,
+DEFINE_DEVICE_TYPE_STRUCT(vsnd, VSND,
     .update_config = (device_update_config_fn_t) libxl__update_config_vsnd,
     .from_xenstore = (device_from_xenstore_fn_t) libxl__vsnd_from_xenstore,
     .set_xenstore_config = (device_set_xenstore_config_fn_t)
diff --git a/tools/libxl/libxl_vtpm.c b/tools/libxl/libxl_vtpm.c
index 3f0c563..c645074 100644
--- a/tools/libxl/libxl_vtpm.c
+++ b/tools/libxl/libxl_vtpm.c
@@ -118,9 +118,13 @@ int libxl_device_vtpm_getinfo(libxl_ctx *ctx,
     dompath = libxl__xs_get_dompath(gc, domid);
     vtpminfo->devid = vtpm->devid;
 
-    vtpmpath = GCSPRINTF("%s/device/vtpm/%d", dompath, vtpminfo->devid);
-    libxl_path = GCSPRINTF("%s/device/vtpm/%d",
-                           libxl__xs_libxl_path(gc, domid), vtpminfo->devid);
+    vtpmpath = GCSPRINTF("%s/device/%s/%d", dompath,
+                         libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VTPM),
+                         vtpminfo->devid);
+    libxl_path = GCSPRINTF("%s/device/%s/%d",
+                           libxl__xs_libxl_path(gc, domid),
+                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VTPM),
+                           vtpminfo->devid);
     vtpminfo->backend = xs_read(ctx->xsh, XBT_NULL,
           GCSPRINTF("%s/backend", libxl_path), NULL);
     if (!vtpminfo->backend) {
@@ -244,7 +248,7 @@ static LIBXL_DEFINE_DEVICES_ADD(vtpm)
 LIBXL_DEFINE_DEVICE_REMOVE(vtpm)
 LIBXL_DEFINE_DEVICE_LIST(vtpm)
 
-DEFINE_DEVICE_TYPE_STRUCT(vtpm,
+DEFINE_DEVICE_TYPE_STRUCT(vtpm, VTPM,
     .update_config = libxl_device_vtpm_update_config,
     .from_xenstore = (device_from_xenstore_fn_t)libxl__vtpm_from_xenstore,
     .set_xenstore_config = (device_set_xenstore_config_fn_t)
-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 2/4] libxl: use libxl__device_kind in LIBXL_DEFINE_UPDATE_DEVID
  2017-10-05  9:30 [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
  2017-10-05  9:30 ` [PATCH 1/4] libxl: use libxl__device_kind to get device XS entry Oleksandr Grytsov
@ 2017-10-05  9:30 ` Oleksandr Grytsov
  2017-10-31 10:21   ` Wei Liu
  2017-10-05  9:30 ` [PATCH 3/4] libxl: move libxl__device_from_ to LIBXL_DEFINE_DEVICE_FROM_TYPE Oleksandr Grytsov
                   ` (3 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Oleksandr Grytsov @ 2017-10-05  9:30 UTC (permalink / raw)
  To: xen-devel; +Cc: ian.jackson, wei.liu2, Oleksandr Grytsov

From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>

Use libxl__..._devtype.type to update device id.

Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
---
 tools/libxl/libxl_9pfs.c     |  2 +-
 tools/libxl/libxl_console.c  |  2 +-
 tools/libxl/libxl_device.c   |  7 ++++---
 tools/libxl/libxl_internal.h | 12 +++++++-----
 tools/libxl/libxl_nic.c      |  2 +-
 tools/libxl/libxl_usb.c      |  2 +-
 tools/libxl/libxl_vdispl.c   |  2 +-
 tools/libxl/libxl_vkb.c      |  2 +-
 tools/libxl/libxl_vsnd.c     |  2 +-
 tools/libxl/libxl_vtpm.c     |  2 +-
 10 files changed, 19 insertions(+), 16 deletions(-)

diff --git a/tools/libxl/libxl_9pfs.c b/tools/libxl/libxl_9pfs.c
index c3dd786..1298db1 100644
--- a/tools/libxl/libxl_9pfs.c
+++ b/tools/libxl/libxl_9pfs.c
@@ -37,7 +37,7 @@ static int libxl__device_from_p9(libxl__gc *gc, uint32_t domid,
    return 0;
 }
 
-static LIBXL_DEFINE_UPDATE_DEVID(p9, "9pfs")
+static LIBXL_DEFINE_UPDATE_DEVID(p9)
 
 static int libxl__set_xenstore_p9(libxl__gc *gc, uint32_t domid,
                                   libxl_device_p9 *p9,
diff --git a/tools/libxl/libxl_console.c b/tools/libxl/libxl_console.c
index b7c0d34..002bcae 100644
--- a/tools/libxl/libxl_console.c
+++ b/tools/libxl/libxl_console.c
@@ -643,7 +643,7 @@ out:
     return AO_INPROGRESS;
 }
 
-static LIBXL_DEFINE_UPDATE_DEVID(vfb, "vfb")
+static LIBXL_DEFINE_UPDATE_DEVID(vfb)
 
 static int libxl__set_xenstore_vfb(libxl__gc *gc, uint32_t domid,
                                    libxl_device_vfb *vfb,
diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c
index 7aaf493..f84422e 100644
--- a/tools/libxl/libxl_device.c
+++ b/tools/libxl/libxl_device.c
@@ -1386,7 +1386,8 @@ out:
 }
 
 /* common function to get next device id */
-int libxl__device_nextid(libxl__gc *gc, uint32_t domid, char *device)
+int libxl__device_nextid(libxl__gc *gc, uint32_t domid,
+                         libxl__device_kind device)
 {
     char *libxl_dom_path, **l;
     unsigned int nb;
@@ -1396,8 +1397,8 @@ int libxl__device_nextid(libxl__gc *gc, uint32_t domid, char *device)
         return nextid;
 
     l = libxl__xs_directory(gc, XBT_NULL,
-        GCSPRINTF("%s/device/%s", libxl_dom_path, device),
-                            &nb);
+        GCSPRINTF("%s/device/%s", libxl_dom_path,
+                  libxl__device_kind_to_string(device)), &nb);
     if (l == NULL || nb == 0)
         nextid = 0;
     else
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index 10ad52f..ef9e781 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -1222,7 +1222,8 @@ _hidden int libxl__init_console_from_channel(libxl__gc *gc,
                                              libxl__device_console *console,
                                              int dev_num,
                                              libxl_device_channel *channel);
-_hidden int libxl__device_nextid(libxl__gc *gc, uint32_t domid, char *device);
+_hidden int libxl__device_nextid(libxl__gc *gc, uint32_t domid,
+                                 libxl__device_kind device);
 _hidden int libxl__resolve_domid(libxl__gc *gc, const char *name,
                                  uint32_t *domid);
 
@@ -3441,13 +3442,14 @@ _hidden void libxl__bootloader_run(libxl__egc*, libxl__bootloader_state *st);
         return AO_INPROGRESS;                                           \
     }
 
-#define LIBXL_DEFINE_UPDATE_DEVID(type, name)                           \
-    int libxl__device_##type##_update_devid(libxl__gc *gc,              \
+#define LIBXL_DEFINE_UPDATE_DEVID(name)                                 \
+    int libxl__device_##name##_update_devid(libxl__gc *gc,              \
                                             uint32_t domid,             \
-                                            libxl_device_##type *type)  \
+                                            libxl_device_##name *type)  \
     {                                                                   \
         if (type->devid == -1)                                          \
-            type->devid = libxl__device_nextid(gc, domid, name);        \
+            type->devid = libxl__device_nextid(gc, domid,               \
+                          libxl__##name##_devtype.type);                \
         if (type->devid < 0)                                            \
             return ERROR_FAIL;                                          \
         return 0;                                                       \
diff --git a/tools/libxl/libxl_nic.c b/tools/libxl/libxl_nic.c
index 44d0fa7..fb5ae44 100644
--- a/tools/libxl/libxl_nic.c
+++ b/tools/libxl/libxl_nic.c
@@ -139,7 +139,7 @@ static void libxl__update_config_nic(libxl__gc *gc, libxl_device_nic *dst,
     libxl_mac_copy(CTX, &dst->mac, &src->mac);
 }
 
-static LIBXL_DEFINE_UPDATE_DEVID(nic, "vif")
+static LIBXL_DEFINE_UPDATE_DEVID(nic)
 
 static int libxl__set_xenstore_nic(libxl__gc *gc, uint32_t domid,
                                    libxl_device_nic *nic,
diff --git a/tools/libxl/libxl_usb.c b/tools/libxl/libxl_usb.c
index 6ce6957..045b50a 100644
--- a/tools/libxl/libxl_usb.c
+++ b/tools/libxl/libxl_usb.c
@@ -432,7 +432,7 @@ static int libxl__device_usbdev_del_hvm(libxl__gc *gc, uint32_t domid,
     return libxl__qmp_run_command_flexarray(gc, domid, "device_del", qmp_args);
 }
 
-static LIBXL_DEFINE_UPDATE_DEVID(usbctrl, "vusb")
+static LIBXL_DEFINE_UPDATE_DEVID(usbctrl)
 
 /* AO operation to add a usb controller.
  *
diff --git a/tools/libxl/libxl_vdispl.c b/tools/libxl/libxl_vdispl.c
index 31409a4..f2d1444 100644
--- a/tools/libxl/libxl_vdispl.c
+++ b/tools/libxl/libxl_vdispl.c
@@ -249,7 +249,7 @@ out:
 LIBXL_DEFINE_DEVICE_ADD(vdispl)
 static LIBXL_DEFINE_DEVICES_ADD(vdispl)
 LIBXL_DEFINE_DEVICE_REMOVE(vdispl)
-static LIBXL_DEFINE_UPDATE_DEVID(vdispl, "vdispl")
+static LIBXL_DEFINE_UPDATE_DEVID(vdispl)
 LIBXL_DEFINE_DEVICE_LIST(vdispl)
 
 DEFINE_DEVICE_TYPE_STRUCT(vdispl, VDISPL,
diff --git a/tools/libxl/libxl_vkb.c b/tools/libxl/libxl_vkb.c
index 1cd7feb..13aa01f 100644
--- a/tools/libxl/libxl_vkb.c
+++ b/tools/libxl/libxl_vkb.c
@@ -160,7 +160,7 @@ out:
      return rc;
 }
 
-static LIBXL_DEFINE_UPDATE_DEVID(vkb, "vkbd")
+static LIBXL_DEFINE_UPDATE_DEVID(vkb)
 
 #define libxl__add_vkbs NULL
 #define libxl_device_vkb_compare NULL
diff --git a/tools/libxl/libxl_vsnd.c b/tools/libxl/libxl_vsnd.c
index f81a9e2..8dfda46 100644
--- a/tools/libxl/libxl_vsnd.c
+++ b/tools/libxl/libxl_vsnd.c
@@ -644,7 +644,7 @@ out:
 LIBXL_DEFINE_DEVICE_ADD(vsnd)
 static LIBXL_DEFINE_DEVICES_ADD(vsnd)
 LIBXL_DEFINE_DEVICE_REMOVE(vsnd)
-static LIBXL_DEFINE_UPDATE_DEVID(vsnd, "vsnd")
+static LIBXL_DEFINE_UPDATE_DEVID(vsnd)
 LIBXL_DEFINE_DEVICE_LIST(vsnd)
 
 DEFINE_DEVICE_TYPE_STRUCT(vsnd, VSND,
diff --git a/tools/libxl/libxl_vtpm.c b/tools/libxl/libxl_vtpm.c
index c645074..f9ba481 100644
--- a/tools/libxl/libxl_vtpm.c
+++ b/tools/libxl/libxl_vtpm.c
@@ -49,7 +49,7 @@ static void libxl__update_config_vtpm(libxl__gc *gc, libxl_device_vtpm *dst,
     libxl_uuid_copy(CTX, &dst->uuid, &src->uuid);
 }
 
-static LIBXL_DEFINE_UPDATE_DEVID(vtpm, "vtpm")
+static LIBXL_DEFINE_UPDATE_DEVID(vtpm)
 
 static int libxl__set_xenstore_vtpm(libxl__gc *gc, uint32_t domid,
                                     libxl_device_vtpm *vtpm,
-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 3/4] libxl: move libxl__device_from_ to LIBXL_DEFINE_DEVICE_FROM_TYPE
  2017-10-05  9:30 [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
  2017-10-05  9:30 ` [PATCH 1/4] libxl: use libxl__device_kind to get device XS entry Oleksandr Grytsov
  2017-10-05  9:30 ` [PATCH 2/4] libxl: use libxl__device_kind in LIBXL_DEFINE_UPDATE_DEVID Oleksandr Grytsov
@ 2017-10-05  9:30 ` Oleksandr Grytsov
  2017-10-31 10:25   ` Wei Liu
  2017-10-05  9:30 ` [PATCH 4/4] libxl: move ibxl_devid_to_device_... to LIBXL_DEFINE_DEVID_TO_DEVICE Oleksandr Grytsov
                   ` (2 subsequent siblings)
  5 siblings, 1 reply; 12+ messages in thread
From: Oleksandr Grytsov @ 2017-10-05  9:30 UTC (permalink / raw)
  To: xen-devel; +Cc: ian.jackson, wei.liu2, Oleksandr Grytsov

From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>

LIBXL_DEFINE_DEVICE_FROM_TYPE uses libxl__..._devtype.type to
be assigned as device and backend type.

Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
---
 tools/libxl/libxl_9pfs.c     | 19 +++----------------
 tools/libxl/libxl_console.c  | 18 +++---------------
 tools/libxl/libxl_internal.h | 15 +++++++++++++++
 tools/libxl/libxl_nic.c      | 19 +++----------------
 tools/libxl/libxl_vdispl.c   | 20 ++++----------------
 tools/libxl/libxl_vkb.c      | 15 +--------------
 tools/libxl/libxl_vsnd.c     | 21 +++++----------------
 tools/libxl/libxl_vtpm.c     | 21 ++++-----------------
 8 files changed, 38 insertions(+), 110 deletions(-)

diff --git a/tools/libxl/libxl_9pfs.c b/tools/libxl/libxl_9pfs.c
index 1298db1..e5c41e9 100644
--- a/tools/libxl/libxl_9pfs.c
+++ b/tools/libxl/libxl_9pfs.c
@@ -23,22 +23,6 @@ static int libxl__device_p9_setdefault(libxl__gc *gc, uint32_t domid,
     return libxl__resolve_domid(gc, p9->backend_domname, &p9->backend_domid);
 }
 
-static int libxl__device_from_p9(libxl__gc *gc, uint32_t domid,
-                                 libxl_device_p9 *p9,
-                                 libxl__device *device)
-{
-   device->backend_devid   = p9->devid;
-   device->backend_domid   = p9->backend_domid;
-   device->backend_kind    = LIBXL__DEVICE_KIND_9PFS;
-   device->devid           = p9->devid;
-   device->domid           = domid;
-   device->kind            = LIBXL__DEVICE_KIND_9PFS;
-
-   return 0;
-}
-
-static LIBXL_DEFINE_UPDATE_DEVID(p9)
-
 static int libxl__set_xenstore_p9(libxl__gc *gc, uint32_t domid,
                                   libxl_device_p9 *p9,
                                   flexarray_t *back, flexarray_t *front,
@@ -56,6 +40,9 @@ static int libxl__set_xenstore_p9(libxl__gc *gc, uint32_t domid,
 #define libxl_device_p9_list NULL
 #define libxl_device_p9_compare NULL
 
+static LIBXL_DEFINE_UPDATE_DEVID(p9)
+static LIBXL_DEFINE_DEVICE_FROM_TYPE(p9)
+
 LIBXL_DEFINE_DEVICE_REMOVE(p9)
 
 DEFINE_DEVICE_TYPE_STRUCT(p9, 9PFS,
diff --git a/tools/libxl/libxl_console.c b/tools/libxl/libxl_console.c
index 002bcae..329db6c 100644
--- a/tools/libxl/libxl_console.c
+++ b/tools/libxl/libxl_console.c
@@ -613,19 +613,6 @@ static int libxl__device_vfb_setdefault(libxl__gc *gc, uint32_t domid,
     return rc;
 }
 
-static int libxl__device_from_vfb(libxl__gc *gc, uint32_t domid,
-                                  libxl_device_vfb *vfb,
-                                  libxl__device *device)
-{
-    device->backend_devid = vfb->devid;
-    device->backend_domid = vfb->backend_domid;
-    device->backend_kind = LIBXL__DEVICE_KIND_VFB;
-    device->devid = vfb->devid;
-    device->domid = domid;
-    device->kind = LIBXL__DEVICE_KIND_VFB;
-    return 0;
-}
-
 int libxl_device_vfb_add(libxl_ctx *ctx, uint32_t domid, libxl_device_vfb *vfb,
                          const libxl_asyncop_how *ao_how)
 {
@@ -643,8 +630,6 @@ out:
     return AO_INPROGRESS;
 }
 
-static LIBXL_DEFINE_UPDATE_DEVID(vfb)
-
 static int libxl__set_xenstore_vfb(libxl__gc *gc, uint32_t domid,
                                    libxl_device_vfb *vfb,
                                   flexarray_t *back, flexarray_t *front,
@@ -685,6 +670,9 @@ static int libxl__set_xenstore_vfb(libxl__gc *gc, uint32_t domid,
 #define libxl_device_vfb_list NULL
 #define libxl_device_vfb_compare NULL
 
+static LIBXL_DEFINE_UPDATE_DEVID(vfb)
+static LIBXL_DEFINE_DEVICE_FROM_TYPE(vfb)
+
 /* vfb */
 LIBXL_DEFINE_DEVICE_REMOVE(vfb)
 
diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index ef9e781..d1a8d8e 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -3455,6 +3455,21 @@ _hidden void libxl__bootloader_run(libxl__egc*, libxl__bootloader_state *st);
         return 0;                                                       \
     }
 
+#define LIBXL_DEFINE_DEVICE_FROM_TYPE(name)                             \
+    int libxl__device_from_##name(libxl__gc *gc, uint32_t domid,        \
+                                  libxl_device_##name *type,            \
+                                  libxl__device *device)                \
+    {                                                                   \
+        device->backend_devid   = type->devid;                          \
+        device->backend_domid   = type->backend_domid;                  \
+        device->backend_kind    = libxl__##name##_devtype.type;         \
+        device->devid           = type->devid;                          \
+        device->domid           = domid;                                \
+        device->kind            = libxl__##name##_devtype.type;         \
+                                                                        \
+        return 0;                                                       \
+    }
+
 #define LIBXL_DEFINE_DEVICE_REMOVE(type)                                \
     LIBXL_DEFINE_DEVICE_REMOVE_EXT(type, generic, remove, 0)            \
     LIBXL_DEFINE_DEVICE_REMOVE_EXT(type, generic, destroy, 1)
diff --git a/tools/libxl/libxl_nic.c b/tools/libxl/libxl_nic.c
index fb5ae44..2d01803 100644
--- a/tools/libxl/libxl_nic.c
+++ b/tools/libxl/libxl_nic.c
@@ -117,20 +117,6 @@ static int libxl__device_nic_setdefault(libxl__gc *gc, uint32_t domid,
     return rc;
 }
 
-static int libxl__device_from_nic(libxl__gc *gc, uint32_t domid,
-                                  libxl_device_nic *nic,
-                                  libxl__device *device)
-{
-    device->backend_devid    = nic->devid;
-    device->backend_domid    = nic->backend_domid;
-    device->backend_kind     = LIBXL__DEVICE_KIND_VIF;
-    device->devid            = nic->devid;
-    device->domid            = domid;
-    device->kind             = LIBXL__DEVICE_KIND_VIF;
-
-    return 0;
-}
-
 static void libxl__update_config_nic(libxl__gc *gc, libxl_device_nic *dst,
                                      const libxl_device_nic *src)
 {
@@ -139,8 +125,6 @@ static void libxl__update_config_nic(libxl__gc *gc, libxl_device_nic *dst,
     libxl_mac_copy(CTX, &dst->mac, &src->mac);
 }
 
-static LIBXL_DEFINE_UPDATE_DEVID(nic)
-
 static int libxl__set_xenstore_nic(libxl__gc *gc, uint32_t domid,
                                    libxl_device_nic *nic,
                                    flexarray_t *back, flexarray_t *front,
@@ -542,6 +526,9 @@ out:
     return ret;
 }
 
+static LIBXL_DEFINE_UPDATE_DEVID(nic)
+static LIBXL_DEFINE_DEVICE_FROM_TYPE(nic)
+
 LIBXL_DEFINE_DEVICE_ADD(nic)
 LIBXL_DEFINE_DEVICES_ADD(nic)
 LIBXL_DEFINE_DEVICE_REMOVE(nic)
diff --git a/tools/libxl/libxl_vdispl.c b/tools/libxl/libxl_vdispl.c
index f2d1444..0d87500 100644
--- a/tools/libxl/libxl_vdispl.c
+++ b/tools/libxl/libxl_vdispl.c
@@ -22,20 +22,6 @@ static int libxl__device_vdispl_setdefault(libxl__gc *gc, uint32_t domid,
                                 &vdispl->backend_domid);
 }
 
-static int libxl__device_from_vdispl(libxl__gc *gc, uint32_t domid,
-                                     libxl_device_vdispl *vdispl,
-                                     libxl__device *device)
-{
-   device->backend_devid   = vdispl->devid;
-   device->backend_domid   = vdispl->backend_domid;
-   device->backend_kind    = LIBXL__DEVICE_KIND_VDISPL;
-   device->devid           = vdispl->devid;
-   device->domid           = domid;
-   device->kind            = LIBXL__DEVICE_KIND_VDISPL;
-
-   return 0;
-}
-
 static int libxl__vdispl_from_xenstore(libxl__gc *gc, const char *libxl_path,
                                        libxl_devid devid,
                                        libxl_device_vdispl *vdispl)
@@ -246,10 +232,12 @@ out:
     return rc;
 }
 
-LIBXL_DEFINE_DEVICE_ADD(vdispl)
+static LIBXL_DEFINE_DEVICE_FROM_TYPE(vdispl)
+static LIBXL_DEFINE_UPDATE_DEVID(vdispl)
 static LIBXL_DEFINE_DEVICES_ADD(vdispl)
+
+LIBXL_DEFINE_DEVICE_ADD(vdispl)
 LIBXL_DEFINE_DEVICE_REMOVE(vdispl)
-static LIBXL_DEFINE_UPDATE_DEVID(vdispl)
 LIBXL_DEFINE_DEVICE_LIST(vdispl)
 
 DEFINE_DEVICE_TYPE_STRUCT(vdispl, VDISPL,
diff --git a/tools/libxl/libxl_vkb.c b/tools/libxl/libxl_vkb.c
index 13aa01f..6ee0a7e 100644
--- a/tools/libxl/libxl_vkb.c
+++ b/tools/libxl/libxl_vkb.c
@@ -21,20 +21,6 @@ static int libxl__device_vkb_setdefault(libxl__gc *gc, uint32_t domid,
     return libxl__resolve_domid(gc, vkb->backend_domname, &vkb->backend_domid);
 }
 
-static int libxl__device_from_vkb(libxl__gc *gc, uint32_t domid,
-                                  libxl_device_vkb *vkb,
-                                  libxl__device *device)
-{
-    device->backend_devid = vkb->devid;
-    device->backend_domid = vkb->backend_domid;
-    device->backend_kind = LIBXL__DEVICE_KIND_VKBD;
-    device->devid = vkb->devid;
-    device->domid = domid;
-    device->kind = LIBXL__DEVICE_KIND_VKBD;
-
-    return 0;
-}
-
 static int libxl__device_vkb_dm_needed(libxl_device_vkb *vkb, uint32_t domid)
 {
    if (vkb->backend_type == LIBXL_VKB_BACKEND_QEMU)
@@ -161,6 +147,7 @@ out:
 }
 
 static LIBXL_DEFINE_UPDATE_DEVID(vkb)
+static LIBXL_DEFINE_DEVICE_FROM_TYPE(vkb)
 
 #define libxl__add_vkbs NULL
 #define libxl_device_vkb_compare NULL
diff --git a/tools/libxl/libxl_vsnd.c b/tools/libxl/libxl_vsnd.c
index 8dfda46..8cc3a4b 100644
--- a/tools/libxl/libxl_vsnd.c
+++ b/tools/libxl/libxl_vsnd.c
@@ -23,20 +23,6 @@ static int libxl__device_vsnd_setdefault(libxl__gc *gc, uint32_t domid,
                                 &vsnd->backend_domid);
 }
 
-static int libxl__device_from_vsnd(libxl__gc *gc, uint32_t domid,
-                                   libxl_device_vsnd *vsnd,
-                                   libxl__device *device)
-{
-   device->backend_devid   = vsnd->devid;
-   device->backend_domid   = vsnd->backend_domid;
-   device->backend_kind    = LIBXL__DEVICE_KIND_VSND;
-   device->devid           = vsnd->devid;
-   device->domid           = domid;
-   device->kind            = LIBXL__DEVICE_KIND_VSND;
-
-   return 0;
-}
-
 static int libxl__sample_rates_from_string(libxl__gc *gc, const char *str,
                                            libxl_vsnd_params *params)
 {
@@ -641,10 +627,13 @@ out:
     return rc;
 }
 
-LIBXL_DEFINE_DEVICE_ADD(vsnd)
+
+static LIBXL_DEFINE_UPDATE_DEVID(vsnd)
+static LIBXL_DEFINE_DEVICE_FROM_TYPE(vsnd)
 static LIBXL_DEFINE_DEVICES_ADD(vsnd)
+
+LIBXL_DEFINE_DEVICE_ADD(vsnd)
 LIBXL_DEFINE_DEVICE_REMOVE(vsnd)
-static LIBXL_DEFINE_UPDATE_DEVID(vsnd)
 LIBXL_DEFINE_DEVICE_LIST(vsnd)
 
 DEFINE_DEVICE_TYPE_STRUCT(vsnd, VSND,
diff --git a/tools/libxl/libxl_vtpm.c b/tools/libxl/libxl_vtpm.c
index f9ba481..3a9e972 100644
--- a/tools/libxl/libxl_vtpm.c
+++ b/tools/libxl/libxl_vtpm.c
@@ -28,20 +28,6 @@ static int libxl__device_vtpm_setdefault(libxl__gc *gc, uint32_t domid,
     return rc;
 }
 
-static int libxl__device_from_vtpm(libxl__gc *gc, uint32_t domid,
-                                   libxl_device_vtpm *vtpm,
-                                   libxl__device *device)
-{
-   device->backend_devid   = vtpm->devid;
-   device->backend_domid   = vtpm->backend_domid;
-   device->backend_kind    = LIBXL__DEVICE_KIND_VTPM;
-   device->devid           = vtpm->devid;
-   device->domid           = domid;
-   device->kind            = LIBXL__DEVICE_KIND_VTPM;
-
-   return 0;
-}
-
 static void libxl__update_config_vtpm(libxl__gc *gc, libxl_device_vtpm *dst,
                                       libxl_device_vtpm *src)
 {
@@ -49,8 +35,6 @@ static void libxl__update_config_vtpm(libxl__gc *gc, libxl_device_vtpm *dst,
     libxl_uuid_copy(CTX, &dst->uuid, &src->uuid);
 }
 
-static LIBXL_DEFINE_UPDATE_DEVID(vtpm)
-
 static int libxl__set_xenstore_vtpm(libxl__gc *gc, uint32_t domid,
                                     libxl_device_vtpm *vtpm,
                                     flexarray_t *back, flexarray_t *front,
@@ -243,8 +227,11 @@ static void libxl_device_vtpm_update_config(libxl__gc *gc, void *d, void *s)
     libxl__update_config_vtpm(gc, d, s);
 }
 
-LIBXL_DEFINE_DEVICE_ADD(vtpm)
+static LIBXL_DEFINE_UPDATE_DEVID(vtpm)
+static LIBXL_DEFINE_DEVICE_FROM_TYPE(vtpm)
 static LIBXL_DEFINE_DEVICES_ADD(vtpm)
+
+LIBXL_DEFINE_DEVICE_ADD(vtpm)
 LIBXL_DEFINE_DEVICE_REMOVE(vtpm)
 LIBXL_DEFINE_DEVICE_LIST(vtpm)
 
-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* [PATCH 4/4] libxl: move ibxl_devid_to_device_... to LIBXL_DEFINE_DEVID_TO_DEVICE
  2017-10-05  9:30 [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
                   ` (2 preceding siblings ...)
  2017-10-05  9:30 ` [PATCH 3/4] libxl: move libxl__device_from_ to LIBXL_DEFINE_DEVICE_FROM_TYPE Oleksandr Grytsov
@ 2017-10-05  9:30 ` Oleksandr Grytsov
  2017-10-31 10:26   ` Wei Liu
  2017-10-24  7:41 ` [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
  2018-01-24 12:10 ` Wei Liu
  5 siblings, 1 reply; 12+ messages in thread
From: Oleksandr Grytsov @ 2017-10-05  9:30 UTC (permalink / raw)
  To: xen-devel; +Cc: ian.jackson, wei.liu2, Oleksandr Grytsov

From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>

Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
---
 tools/libxl/libxl_internal.h | 38 ++++++++++++++++++++++++++++++++++++++
 tools/libxl/libxl_nic.c      | 26 +-------------------------
 tools/libxl/libxl_vdispl.c   | 35 +----------------------------------
 tools/libxl/libxl_vkb.c      | 35 +----------------------------------
 tools/libxl/libxl_vsnd.c     | 36 +-----------------------------------
 5 files changed, 42 insertions(+), 128 deletions(-)

diff --git a/tools/libxl/libxl_internal.h b/tools/libxl/libxl_internal.h
index d1a8d8e..26204f0 100644
--- a/tools/libxl/libxl_internal.h
+++ b/tools/libxl/libxl_internal.h
@@ -3470,6 +3470,44 @@ _hidden void libxl__bootloader_run(libxl__egc*, libxl__bootloader_state *st);
         return 0;                                                       \
     }
 
+#define LIBXL_DEFINE_DEVID_TO_DEVICE(name)                              \
+    int libxl_devid_to_device_##name(libxl_ctx *ctx, uint32_t domid,    \
+                                     int devid,                         \
+                                     libxl_device_##name *type)         \
+    {                                                                   \
+        GC_INIT(ctx);                                                   \
+                                                                        \
+        char *device_path;                                              \
+        const char *tmp;                                                \
+        int rc;                                                         \
+                                                                        \
+        libxl_device_##name##_init(type);                               \
+                                                                        \
+        device_path = GCSPRINTF("%s/device/%s/%d",                      \
+                                libxl__xs_libxl_path(gc, domid),        \
+                                libxl__device_kind_to_string(           \
+                                libxl__##name##_devtype.type),          \
+                                devid);                                 \
+                                                                        \
+        if (libxl__xs_read_mandatory(gc, XBT_NULL, device_path, &tmp)) {\
+            rc = ERROR_NOTFOUND; goto out;                              \
+        }                                                               \
+                                                                        \
+        if (libxl__##name##_devtype.from_xenstore) {                    \
+            rc = libxl__##name##_devtype.from_xenstore(gc, device_path, \
+                                                       devid, type);    \
+            if (rc) goto out;                                           \
+        }                                                               \
+                                                                        \
+        rc = 0;                                                         \
+                                                                        \
+    out:                                                                \
+                                                                        \
+        GC_FREE;                                                        \
+        return rc;                                                      \
+    }
+
+
 #define LIBXL_DEFINE_DEVICE_REMOVE(type)                                \
     LIBXL_DEFINE_DEVICE_REMOVE_EXT(type, generic, remove, 0)            \
     LIBXL_DEFINE_DEVICE_REMOVE_EXT(type, generic, destroy, 1)
diff --git a/tools/libxl/libxl_nic.c b/tools/libxl/libxl_nic.c
index 2d01803..b9ad262 100644
--- a/tools/libxl/libxl_nic.c
+++ b/tools/libxl/libxl_nic.c
@@ -381,31 +381,6 @@ static int libxl__nic_from_xenstore(libxl__gc *gc, const char *libxl_path,
     return rc;
 }
 
-int libxl_devid_to_device_nic(libxl_ctx *ctx, uint32_t domid,
-                              int devid, libxl_device_nic *nic)
-{
-    GC_INIT(ctx);
-    char *libxl_dom_path, *libxl_path;
-    int rc = ERROR_FAIL;
-
-    libxl_device_nic_init(nic);
-    libxl_dom_path = libxl__xs_libxl_path(gc, domid);
-    if (!libxl_dom_path)
-        goto out;
-
-    libxl_path = GCSPRINTF("%s/device/%s/%d", libxl_dom_path,
-                           libxl__device_kind_to_string(LIBXL__DEVICE_KIND_VIF),
-                           devid);
-
-    rc = libxl__nic_from_xenstore(gc, libxl_path, devid, nic);
-    if (rc) goto out;
-
-    rc = 0;
-out:
-    GC_FREE;
-    return rc;
-}
-
 libxl_device_nic *libxl_device_nic_list(libxl_ctx *ctx, uint32_t domid, int *num)
 {
     libxl_device_nic *r;
@@ -529,6 +504,7 @@ out:
 static LIBXL_DEFINE_UPDATE_DEVID(nic)
 static LIBXL_DEFINE_DEVICE_FROM_TYPE(nic)
 
+LIBXL_DEFINE_DEVID_TO_DEVICE(nic)
 LIBXL_DEFINE_DEVICE_ADD(nic)
 LIBXL_DEFINE_DEVICES_ADD(nic)
 LIBXL_DEFINE_DEVICE_REMOVE(nic)
diff --git a/tools/libxl/libxl_vdispl.c b/tools/libxl/libxl_vdispl.c
index 0d87500..1cea0bd 100644
--- a/tools/libxl/libxl_vdispl.c
+++ b/tools/libxl/libxl_vdispl.c
@@ -198,44 +198,11 @@ out:
      return rc;
 }
 
-int libxl_devid_to_device_vdispl(libxl_ctx *ctx, uint32_t domid,
-                                 int devid, libxl_device_vdispl *vdispl)
-{
-    GC_INIT(ctx);
-
-    libxl_device_vdispl *vdispls = NULL;
-    int n, i;
-    int rc;
-
-    libxl_device_vdispl_init(vdispl);
-
-    vdispls = libxl__device_list(gc, &libxl__vdispl_devtype, domid, &n);
-
-    if (!vdispls) { rc = ERROR_NOTFOUND; goto out; }
-
-    for (i = 0; i < n; ++i) {
-        if (devid == vdispls[i].devid) {
-            libxl_device_vdispl_copy(ctx, vdispl, &vdispls[i]);
-            rc = 0;
-            goto out;
-        }
-    }
-
-    rc = ERROR_NOTFOUND;
-
-out:
-
-    if (vdispls)
-        libxl__device_list_free(&libxl__vdispl_devtype, vdispls, n);
-
-    GC_FREE;
-    return rc;
-}
-
 static LIBXL_DEFINE_DEVICE_FROM_TYPE(vdispl)
 static LIBXL_DEFINE_UPDATE_DEVID(vdispl)
 static LIBXL_DEFINE_DEVICES_ADD(vdispl)
 
+LIBXL_DEFINE_DEVID_TO_DEVICE(vdispl)
 LIBXL_DEFINE_DEVICE_ADD(vdispl)
 LIBXL_DEFINE_DEVICE_REMOVE(vdispl)
 LIBXL_DEFINE_DEVICE_LIST(vdispl)
diff --git a/tools/libxl/libxl_vkb.c b/tools/libxl/libxl_vkb.c
index 6ee0a7e..d4d531a 100644
--- a/tools/libxl/libxl_vkb.c
+++ b/tools/libxl/libxl_vkb.c
@@ -61,40 +61,6 @@ out:
     return AO_INPROGRESS;
 }
 
-int libxl_devid_to_device_vkb(libxl_ctx *ctx, uint32_t domid,
-                              int devid, libxl_device_vkb *vkb)
-{
-    GC_INIT(ctx);
-
-    libxl_device_vkb *vkbs = NULL;
-    int n, i;
-    int rc;
-
-    libxl_device_vkb_init(vkb);
-
-    vkbs = libxl__device_list(gc, &libxl__vkb_devtype, domid, &n);
-
-    if (!vkbs) { rc = ERROR_NOTFOUND; goto out; }
-
-    for (i = 0; i < n; ++i) {
-        if (devid == vkbs[i].devid) {
-            libxl_device_vkb_copy(ctx, vkb, &vkbs[i]);
-            rc = 0;
-            goto out;
-        }
-    }
-
-    rc = ERROR_NOTFOUND;
-
-out:
-
-    if (vkbs)
-        libxl__device_list_free(&libxl__vkb_devtype, vkbs, n);
-
-    GC_FREE;
-    return rc;
-}
-
 int libxl_device_vkb_getinfo(libxl_ctx *ctx, uint32_t domid,
                              libxl_device_vkb *vkb,
                              libxl_vkbinfo *info)
@@ -152,6 +118,7 @@ static LIBXL_DEFINE_DEVICE_FROM_TYPE(vkb)
 #define libxl__add_vkbs NULL
 #define libxl_device_vkb_compare NULL
 
+LIBXL_DEFINE_DEVID_TO_DEVICE(vkb)
 LIBXL_DEFINE_DEVICE_LIST(vkb)
 LIBXL_DEFINE_DEVICE_REMOVE(vkb)
 
diff --git a/tools/libxl/libxl_vsnd.c b/tools/libxl/libxl_vsnd.c
index 8cc3a4b..b44c73c 100644
--- a/tools/libxl/libxl_vsnd.c
+++ b/tools/libxl/libxl_vsnd.c
@@ -593,45 +593,11 @@ out:
      return rc;
 }
 
-int libxl_devid_to_device_vsnd(libxl_ctx *ctx, uint32_t domid,
-                               int devid, libxl_device_vsnd *vsnd)
-{
-    GC_INIT(ctx);
-
-    libxl_device_vsnd *vsnds = NULL;
-    int n, i;
-    int rc;
-
-    libxl_device_vsnd_init(vsnd);
-
-    vsnds = libxl__device_list(gc, &libxl__vsnd_devtype, domid, &n);
-
-    if (!vsnds) { rc = ERROR_NOTFOUND; goto out; }
-
-    for (i = 0; i < n; ++i) {
-        if (devid == vsnds[i].devid) {
-            libxl_device_vsnd_copy(ctx, vsnd, &vsnds[i]);
-            rc = 0;
-            goto out;
-        }
-    }
-
-    rc = ERROR_NOTFOUND;
-
-out:
-
-    if (vsnds)
-        libxl__device_list_free(&libxl__vsnd_devtype, vsnds, n);
-
-    GC_FREE;
-    return rc;
-}
-
-
 static LIBXL_DEFINE_UPDATE_DEVID(vsnd)
 static LIBXL_DEFINE_DEVICE_FROM_TYPE(vsnd)
 static LIBXL_DEFINE_DEVICES_ADD(vsnd)
 
+LIBXL_DEFINE_DEVID_TO_DEVICE(vsnd)
 LIBXL_DEFINE_DEVICE_ADD(vsnd)
 LIBXL_DEFINE_DEVICE_REMOVE(vsnd)
 LIBXL_DEFINE_DEVICE_LIST(vsnd)
-- 
2.7.4


_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply related	[flat|nested] 12+ messages in thread

* Re: [PATCH 0/4] libxl: use libxl__device_kind string to access device
  2017-10-05  9:30 [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
                   ` (3 preceding siblings ...)
  2017-10-05  9:30 ` [PATCH 4/4] libxl: move ibxl_devid_to_device_... to LIBXL_DEFINE_DEVID_TO_DEVICE Oleksandr Grytsov
@ 2017-10-24  7:41 ` Oleksandr Grytsov
  2017-10-30 12:37   ` Oleksandr Grytsov
  2018-01-24 12:10 ` Wei Liu
  5 siblings, 1 reply; 12+ messages in thread
From: Oleksandr Grytsov @ 2017-10-24  7:41 UTC (permalink / raw)
  To: Xen-devel; +Cc: Ian Jackson, Wei Liu, Oleksandr Grytsov


[-- Attachment #1.1: Type: text/plain, Size: 1953 bytes --]

On Thu, Oct 5, 2017 at 12:30 PM, Oleksandr Grytsov <al1img@gmail.com> wrote:

> From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
>
> In current implementation the path of device XS entry is created with
> string from libxl__device_kind enum. But access to the device entry
> usually done with hardcoded path. This is source of potential errors.
> This patchset changes hardcoded device name in the XS path to string
> representation of libxl__device_kind enum. Also it changes "type" field
> in libxl__..._devtype structure to keep libxl__device_kind. It allows
> to move some duplicated functions to macros.
>
> Oleksandr Grytsov (4):
>   libxl: use libxl__device_kind to get device XS entry
>   libxl: use libxl__device_kind in LIBXL_DEFINE_UPDATE_DEVID
>   libxl: move libxl__device_from_ to LIBXL_DEFINE_DEVICE_FROM_TYPE
>   libxl: move ibxl_devid_to_device_... to LIBXL_DEFINE_DEVID_TO_DEVICE
>
>  tools/libxl/libxl_9pfs.c      | 21 +++---------
>  tools/libxl/libxl_colo_nic.c  |  6 ++--
>  tools/libxl/libxl_console.c   | 36 +++++++++-----------
>  tools/libxl/libxl_create.c    |  4 +--
>  tools/libxl/libxl_device.c    | 10 +++---
>  tools/libxl/libxl_disk.c      | 28 +++++++++++-----
>  tools/libxl/libxl_domain.c    |  2 +-
>  tools/libxl/libxl_internal.h  | 77 ++++++++++++++++++++++++++++++
> ++++++-------
>  tools/libxl/libxl_netbuffer.c |  6 ++--
>  tools/libxl/libxl_nic.c       | 55 +++++++------------------------
>  tools/libxl/libxl_pci.c       | 21 ++++++++----
>  tools/libxl/libxl_usb.c       | 52 +++++++++++++++++++----------
>  tools/libxl/libxl_vdispl.c    | 62 ++++++----------------------------
>  tools/libxl/libxl_vkb.c       | 61 +++++-----------------------------
>  tools/libxl/libxl_vsnd.c      | 62 ++++++----------------------------
>  tools/libxl/libxl_vtpm.c      | 33 +++++++------------
>  16 files changed, 222 insertions(+), 314 deletions(-)
>
> --
> 2.7.4
>
>
ping

-- 
Best Regards,
Oleksandr Grytsov.

[-- Attachment #1.2: Type: text/html, Size: 2719 bytes --]

[-- Attachment #2: Type: text/plain, Size: 127 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 0/4] libxl: use libxl__device_kind string to access device
  2017-10-24  7:41 ` [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
@ 2017-10-30 12:37   ` Oleksandr Grytsov
  0 siblings, 0 replies; 12+ messages in thread
From: Oleksandr Grytsov @ 2017-10-30 12:37 UTC (permalink / raw)
  To: Xen-devel; +Cc: Ian Jackson, Wei Liu, Oleksandr Grytsov


[-- Attachment #1.1: Type: text/plain, Size: 2130 bytes --]

On Tue, Oct 24, 2017 at 10:41 AM, Oleksandr Grytsov <al1img@gmail.com>
wrote:

> On Thu, Oct 5, 2017 at 12:30 PM, Oleksandr Grytsov <al1img@gmail.com>
> wrote:
>
>> From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
>>
>> In current implementation the path of device XS entry is created with
>> string from libxl__device_kind enum. But access to the device entry
>> usually done with hardcoded path. This is source of potential errors.
>> This patchset changes hardcoded device name in the XS path to string
>> representation of libxl__device_kind enum. Also it changes "type" field
>> in libxl__..._devtype structure to keep libxl__device_kind. It allows
>> to move some duplicated functions to macros.
>>
>> Oleksandr Grytsov (4):
>>   libxl: use libxl__device_kind to get device XS entry
>>   libxl: use libxl__device_kind in LIBXL_DEFINE_UPDATE_DEVID
>>   libxl: move libxl__device_from_ to LIBXL_DEFINE_DEVICE_FROM_TYPE
>>   libxl: move ibxl_devid_to_device_... to LIBXL_DEFINE_DEVID_TO_DEVICE
>>
>>  tools/libxl/libxl_9pfs.c      | 21 +++---------
>>  tools/libxl/libxl_colo_nic.c  |  6 ++--
>>  tools/libxl/libxl_console.c   | 36 +++++++++-----------
>>  tools/libxl/libxl_create.c    |  4 +--
>>  tools/libxl/libxl_device.c    | 10 +++---
>>  tools/libxl/libxl_disk.c      | 28 +++++++++++-----
>>  tools/libxl/libxl_domain.c    |  2 +-
>>  tools/libxl/libxl_internal.h  | 77 ++++++++++++++++++++++++++++++
>> ++++++-------
>>  tools/libxl/libxl_netbuffer.c |  6 ++--
>>  tools/libxl/libxl_nic.c       | 55 +++++++------------------------
>>  tools/libxl/libxl_pci.c       | 21 ++++++++----
>>  tools/libxl/libxl_usb.c       | 52 +++++++++++++++++++----------
>>  tools/libxl/libxl_vdispl.c    | 62 ++++++----------------------------
>>  tools/libxl/libxl_vkb.c       | 61 +++++-----------------------------
>>  tools/libxl/libxl_vsnd.c      | 62 ++++++----------------------------
>>  tools/libxl/libxl_vtpm.c      | 33 +++++++------------
>>  16 files changed, 222 insertions(+), 314 deletions(-)
>>
>> --
>> 2.7.4
>>
>>
> ping
>
> --
> Best Regards,
> Oleksandr Grytsov.
>

ping

-- 
Best Regards,
Oleksandr Grytsov.

[-- Attachment #1.2: Type: text/html, Size: 3490 bytes --]

[-- Attachment #2: Type: text/plain, Size: 127 bytes --]

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 1/4] libxl: use libxl__device_kind to get device XS entry
  2017-10-05  9:30 ` [PATCH 1/4] libxl: use libxl__device_kind to get device XS entry Oleksandr Grytsov
@ 2017-10-31 10:21   ` Wei Liu
  0 siblings, 0 replies; 12+ messages in thread
From: Wei Liu @ 2017-10-31 10:21 UTC (permalink / raw)
  To: Oleksandr Grytsov; +Cc: xen-devel, wei.liu2, ian.jackson, Oleksandr Grytsov

On Thu, Oct 05, 2017 at 12:30:45PM +0300, Oleksandr Grytsov wrote:
> From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
> 
> On adding to XS name of device is taken from
> libxl__device_kind enum. On getting device from XS
> the name is hardcoded. It leads to potential
> mistmatch errors. The patch is using libxl__device_kind
> everywere to have one source of device name.
> 
> Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com>

Acked-by: Wei Liu <wei.liu2@citrix.com>

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 2/4] libxl: use libxl__device_kind in LIBXL_DEFINE_UPDATE_DEVID
  2017-10-05  9:30 ` [PATCH 2/4] libxl: use libxl__device_kind in LIBXL_DEFINE_UPDATE_DEVID Oleksandr Grytsov
@ 2017-10-31 10:21   ` Wei Liu
  0 siblings, 0 replies; 12+ messages in thread
From: Wei Liu @ 2017-10-31 10:21 UTC (permalink / raw)
  To: Oleksandr Grytsov; +Cc: xen-devel, wei.liu2, ian.jackson, Oleksandr Grytsov

On Thu, Oct 05, 2017 at 12:30:46PM +0300, Oleksandr Grytsov wrote:
> From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
> 
> Use libxl__..._devtype.type to update device id.
> 
> Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com>

Acked-by: Wei Liu <wei.liu2@citrix.com>

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 3/4] libxl: move libxl__device_from_ to LIBXL_DEFINE_DEVICE_FROM_TYPE
  2017-10-05  9:30 ` [PATCH 3/4] libxl: move libxl__device_from_ to LIBXL_DEFINE_DEVICE_FROM_TYPE Oleksandr Grytsov
@ 2017-10-31 10:25   ` Wei Liu
  0 siblings, 0 replies; 12+ messages in thread
From: Wei Liu @ 2017-10-31 10:25 UTC (permalink / raw)
  To: Oleksandr Grytsov; +Cc: xen-devel, wei.liu2, ian.jackson, Oleksandr Grytsov

On Thu, Oct 05, 2017 at 12:30:47PM +0300, Oleksandr Grytsov wrote:
> From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
> 
> LIBXL_DEFINE_DEVICE_FROM_TYPE uses libxl__..._devtype.type to
> be assigned as device and backend type.
> 
> Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com>

Acked-by: Wei Liu <wei.liu2@citrix.com>

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 4/4] libxl: move ibxl_devid_to_device_... to LIBXL_DEFINE_DEVID_TO_DEVICE
  2017-10-05  9:30 ` [PATCH 4/4] libxl: move ibxl_devid_to_device_... to LIBXL_DEFINE_DEVID_TO_DEVICE Oleksandr Grytsov
@ 2017-10-31 10:26   ` Wei Liu
  0 siblings, 0 replies; 12+ messages in thread
From: Wei Liu @ 2017-10-31 10:26 UTC (permalink / raw)
  To: Oleksandr Grytsov; +Cc: xen-devel, wei.liu2, ian.jackson, Oleksandr Grytsov

On Thu, Oct 05, 2017 at 12:30:48PM +0300, Oleksandr Grytsov wrote:
> From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
> 
> Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@epam.com>

Acked-by: Wei Liu <wei.liu2@citrix.com>

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xen.org
https://lists.xen.org/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [PATCH 0/4] libxl: use libxl__device_kind string to access device
  2017-10-05  9:30 [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
                   ` (4 preceding siblings ...)
  2017-10-24  7:41 ` [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
@ 2018-01-24 12:10 ` Wei Liu
  5 siblings, 0 replies; 12+ messages in thread
From: Wei Liu @ 2018-01-24 12:10 UTC (permalink / raw)
  To: Oleksandr Grytsov; +Cc: xen-devel, wei.liu2, ian.jackson, Oleksandr Grytsov

On Thu, Oct 05, 2017 at 12:30:44PM +0300, Oleksandr Grytsov wrote:
> From: Oleksandr Grytsov <oleksandr_grytsov@epam.com>
> 
> In current implementation the path of device XS entry is created with
> string from libxl__device_kind enum. But access to the device entry
> usually done with hardcoded path. This is source of potential errors.
> This patchset changes hardcoded device name in the XS path to string
> representation of libxl__device_kind enum. Also it changes "type" field
> in libxl__..._devtype structure to keep libxl__device_kind. It allows
> to move some duplicated functions to macros.
> 
> Oleksandr Grytsov (4):
>   libxl: use libxl__device_kind to get device XS entry
>   libxl: use libxl__device_kind in LIBXL_DEFINE_UPDATE_DEVID
>   libxl: move libxl__device_from_ to LIBXL_DEFINE_DEVICE_FROM_TYPE
>   libxl: move ibxl_devid_to_device_... to LIBXL_DEFINE_DEVID_TO_DEVICE

Sigh. I tried to apply this series but it doesn't apply anymore. Sorry,
if you still wants it to be upsteamed you need to rebase.

Wei.

_______________________________________________
Xen-devel mailing list
Xen-devel@lists.xenproject.org
https://lists.xenproject.org/mailman/listinfo/xen-devel

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2018-01-24 12:10 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-05  9:30 [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
2017-10-05  9:30 ` [PATCH 1/4] libxl: use libxl__device_kind to get device XS entry Oleksandr Grytsov
2017-10-31 10:21   ` Wei Liu
2017-10-05  9:30 ` [PATCH 2/4] libxl: use libxl__device_kind in LIBXL_DEFINE_UPDATE_DEVID Oleksandr Grytsov
2017-10-31 10:21   ` Wei Liu
2017-10-05  9:30 ` [PATCH 3/4] libxl: move libxl__device_from_ to LIBXL_DEFINE_DEVICE_FROM_TYPE Oleksandr Grytsov
2017-10-31 10:25   ` Wei Liu
2017-10-05  9:30 ` [PATCH 4/4] libxl: move ibxl_devid_to_device_... to LIBXL_DEFINE_DEVID_TO_DEVICE Oleksandr Grytsov
2017-10-31 10:26   ` Wei Liu
2017-10-24  7:41 ` [PATCH 0/4] libxl: use libxl__device_kind string to access device Oleksandr Grytsov
2017-10-30 12:37   ` Oleksandr Grytsov
2018-01-24 12:10 ` Wei Liu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.