[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH 0/2] libxl: add PV display device driver interface
On Thu, Mar 23, 2017 at 4:58 PM, Juergen Gross <jgross@xxxxxxxx> wrote: > On 23/03/17 15:23, al1img . wrote: >> This example is clear. But still wrapper macro is required to make it >> visible for libxen client (xl): >> >> #define LIBXL_DEFINE_DEVICE_LIST_FREE(type) >> void libxl_device_##type##_list_free(libxl_device_##type* list, int nr) >> { >> libxl__device_list_free(libxl__##type##_devtype, list, nr); >> } > > Either this or we could switch to a more generic way avoiding the need > to add multiple very similar functions to libxl: > > #define LIBXL_DEVTYPE_VTPM "vtpm" > > int libxl_device_list_free(const char *type, void *list, int nr) > { > int i; > > for (i = 0; device_type_tbl[i]; i++) { > if (!strcmp(type, device_type_tbl[i]->type)) { > libxl__device_list_free(device_type_tbl[i], list, nr); > return 0; > } > } > return ERROR_INVAL; > } > > and let xl call it via libxl_device_list_free(LIBXL_DEVTYPE_VTPM, ...) > > This is subject to an Ack from the tools maintainers, of course. > >> >> Also where should this function (libxl__device_list_free) be located? >> libxl_device.c? > > I think so. > >> >> Another case is getting this list: >> >> From one side each device should have its own implementation, from >> other side for PV devices >> there is common part like getting devId and backend domId and unique >> part like getting >> device specific parameters (uuid for vtpm). In this case I can do following: >> >> Implement void *libxl__device_list(struct libxl_device_type *dt, >> libxl_ctx *ctx, uint32_t domid, int *num) >> where I will get devId and backend domId. Then add get_params callback >> to libxl_device_type to get device specific >> parameters: >> >> void *libxl__device_pv_list(struct libxl_device_type *dt, libxl_ctx >> *ctx, uint32_t domid, int *num) >> { >> ... >> if (dt->get_patams) { >> dt->get_params(...); >> } >> } >> >> And vtpm get list may look like: >> >> libxl_device_vtpm *libxl_device_vtpm_list(libxl_ctx *ctx, uint32_t >> domid, int *num) >> { >> return libxl__device_list(&libxl__vtpm_devtype, ctx, domid, num); >> } >> >> DEFINE_DEVICE_TYPE_STRUCT(vtpm, >> .update_config = libxl_device_vtpm_update_config >> .get_params = libxl_device_vtpm_get_params >> ); >> >> Correct? > > Right. Possibly using the same trick as above. > > BTW: Please don't top-post. > > > Juergen > >> >> >> 2017-03-23 14:08 GMT+02:00 Juergen Gross <jgross@xxxxxxxx>: >>> On 23/03/17 12:32, al1img . wrote: >>>> Hi Juergen, >>>> >>>> I've checked the mentioned commits. And I don't see how it can be done. >>>> The duplication I see it is in libxl_device_type.add and >>>> libxl_device_type.list functions >>>> for different PV devices. These functions have a lot of common code >>>> which I've tried >>>> to move to macros in my patches. >>> >>> Okay, here an example for replacement of LIBXL_DEFINE_DEVICE_LIST_FREE() >>> >>> void libxl_device_list_free(struct libxl_device_type *dt, >>> void *list, int nr) >>> { >>> int i; >>> >>> for (i = 0; i < nr; i++) >>> dt->dispose(list + i * dt->dev_elem_size); >>> free(list); >>> } >>> >>> BTW: exactly this pattern is to be found at the very end of >>> libxl_retrieve_domain_configuration(). >>> >>> The others should be doable, too. >>> >>> >>> Juergen >>> >>>> >>>> 2017-03-23 12:21 GMT+02:00 Juergen Gross <jgross@xxxxxxxx>: >>>>> On 23/03/17 11:10, Oleksandr Grytsov wrote: >>>>>> From: Oleksandr Grytsov <oleksandr_grytsov@xxxxxxxx> >>>>>> >>>>>> Hi all, >>>>>> >>>>>> We are working on series of PV drivers (display, sound, input etc.) and >>>>>> would like to add their support to libxl and xl. These patches add PV >>>>>> display >>>>>> device. PV display is based on [1] protocol. >>>>>> >>>>>> During implementation I see a lot of code duplication. This problem was >>>>>> mentioned in [2]. One of the solutions was to implement common parts in >>>>>> IDL >>>>>> and make them autogenerated. On my side, to minimize the copy/pasting >>>>>> I've moved common parts into macro functions: LIBXL_DEFINE_DEVICE_COMMIT, >>>>>> LIBXL_DEFINE_DEVICE_LIST_GET, LIBXL_DEFINE_DEVICE_GETINFO etc. >>>>>> Existing PV devices implementations can be reworked to use these macros >>>>>> as >>>>>> well. Any other proposals to avoid the duplications are welcome. >>>>> >>>>> Did you look into the device type framework I introduced with commit >>>>> 74e857c6c7f9 and some followups? Maybe it is possible to expand this >>>>> framework by adding more callbacks to struct libxl_device_type and >>>>> have some common function(s) in libxl_device.c? >>>>> >>>>> Juergen >>>> >>>> >>>> >>> >> >> >> > For me the drawback of more generic way is to cast device_type to void* and back which may be used by client in improper way. Thanks. -- Best Regards, Oleksandr Grytsov. _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |