[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 03/11] libxl: add generic function to get and free device list
On Tue, Jun 27, 2017 at 01:03:19PM +0300, Oleksandr Grytsov wrote: > From: Oleksandr Grytsov <oleksandr_grytsov@xxxxxxxx> > > Add libxl__device_list, libxl__device_list_free. > Device list is created from libxl xen store entries. > In order to fill libxl device structure from xen store, > the device handling framework extended with from_xenstore callback. > On this callback libxl_device shall be filled with data from > be xen store directory. > > Signed-off-by: Oleksandr Grytsov <oleksandr_grytsov@xxxxxxxx> > --- > tools/libxl/libxl_device.c | 76 > ++++++++++++++++++++++++++++++++++++++++++++ > tools/libxl/libxl_internal.h | 8 +++++ > tools/libxl/libxl_vdispl.c | 17 ++++++++-- > 3 files changed, 98 insertions(+), 3 deletions(-) > > diff --git a/tools/libxl/libxl_device.c b/tools/libxl/libxl_device.c > index 00356af..8bcfa2b 100644 > --- a/tools/libxl/libxl_device.c > +++ b/tools/libxl/libxl_device.c > @@ -1793,6 +1793,82 @@ out: > return AO_CREATE_FAIL(rc); > } > > +void* libxl__device_list(const struct libxl_device_type *dt, > + libxl_ctx *ctx, uint32_t domid, int *num) void *libxl_... > +{ > + GC_INIT(ctx); > + > + void *r = NULL; > + void *list = NULL; > + void *item = NULL; > + char *libxl_path; > + char *be_path; > + char** dir = NULL; char **dir > + unsigned int ndirs = 0; > + int rc; > + > + *num = 0; > + > + libxl_path = GCSPRINTF("%s/device/%s", > + libxl__xs_libxl_path(gc, domid), dt->type); > + > + dir = libxl__xs_directory(gc, XBT_NULL, libxl_path, &ndirs); > + > + if (dir && ndirs) { > + list = malloc(dt->dev_elem_size * ndirs); > + void *end = (uint8_t*)list + ndirs * dt->dev_elem_size; (uint8_t *) > + item = list; > + > + while(item < end) { > + be_path = libxl__xs_read(gc, XBT_NULL, > + GCSPRINTF("%s/%s/backend", > + libxl_path, *dir)); > + > + dt->init(item); > + > + if (dt->from_xenstore) > + { Move { to previous line. > + rc = dt->from_xenstore(gc, be_path, atoi(*dir), item); > + if (rc) goto out; > + } > + > + item = (uint8_t*)item + dt->dev_elem_size; > + ++dir; > + } > + } > + > + *num = ndirs; > + r = list; > + list = NULL; > + > +out: > + > + if (list) { > + *num = 0; > + while(item >= list) { Space after while. > + item = (uint8_t*)item - dt->dev_elem_size; > + dt->dispose(item); > + } > + free(list); > + } > + > + GC_FREE; > + > + return r; > +} > + > +void libxl__device_list_free(const struct libxl_device_type *dt, > + void *list, int num) > +{ > + int i; > + > + for (i = 0; i < num; i++) { > + dt->dispose((uint8_t*)list + i * dt->dev_elem_size); > + } > + No need to have {}. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |