|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] libgnttab: Add support for Linux dma-buf
On Mon, Jul 23, 2018 at 03:27:25PM +0300, Oleksandr Andrushchenko wrote:
[...]
> diff --git a/tools/libs/gnttab/linux.c b/tools/libs/gnttab/linux.c
> index 8347ddd3d9cf..9765146f7eb6 100644
> --- a/tools/libs/gnttab/linux.c
> +++ b/tools/libs/gnttab/linux.c
> @@ -1,5 +1,6 @@
> /*
> * Copyright (c) 2007-2008, D G Murray <Derek.Murray@xxxxxxxxxxxx>
> + * Copyright (c) 2018, Oleksandr Andrushchenko, EPAM Systems Inc.
> *
> * This library is free software; you can redistribute it and/or
> * modify it under the terms of the GNU Lesser General Public
> @@ -309,6 +310,118 @@ int osdep_gnttab_grant_copy(xengnttab_handle *xgt,
> return rc;
> }
>
> +int osdep_gnttab_dmabuf_exp_from_refs(xengnttab_handle *xgt, uint32_t domid,
> + uint32_t flags, uint32_t count,
> + const uint32_t *refs,
> + uint32_t *dmabuf_fd)
> +{
> + struct ioctl_gntdev_dmabuf_exp_from_refs *from_refs;
You can set from_refs to NULL here, then ...
> + int rc = 0;
> +
> + if ( !count )
> + {
> + errno = EINVAL;
> + return -1;
rc = -1;
goto out;
in all exit paths.
I don't like using two error handling styles. So please either change to
use goto only or delete the only goto in this function.
> + }
> +
> + from_refs = malloc(sizeof(*from_refs) +
> + (count - 1) * sizeof(from_refs->refs[0]));
> + if ( !from_refs )
> + {
> + errno = ENOMEM;
> + return -1;
> + }
> +
> + from_refs->flags = flags;
> + from_refs->count = count;
> + from_refs->domid = domid;
> +
> + memcpy(from_refs->refs, refs, count * sizeof(from_refs->refs[0]));
> +
> + if ( (rc = ioctl(xgt->fd, IOCTL_GNTDEV_DMABUF_EXP_FROM_REFS, from_refs))
> )
> + {
> + GTERROR(xgt->logger, "ioctl DMABUF_EXP_FROM_REFS failed");
> + goto out;
> + }
> +
> + *dmabuf_fd = from_refs->fd;
> +
> +out:
> + free(from_refs);
> + return rc;
> +}
> +
> +int osdep_gnttab_dmabuf_exp_wait_released(xengnttab_handle *xgt,
> + uint32_t fd, uint32_t wait_to_ms)
> +{
> + struct ioctl_gntdev_dmabuf_exp_wait_released wait;
> + int rc;
> +
> + wait.fd = fd;
> + wait.wait_to_ms = wait_to_ms;
> +
> + if ( (rc = ioctl(xgt->fd, IOCTL_GNTDEV_DMABUF_EXP_WAIT_RELEASED, &wait))
> ) {
{ should be on a new line.
> + if ( errno == ENOENT ) {
Ditto.
> + /* The buffer may have already been released. */
> + errno = 0;
> + rc = 0;
> + } else
> + GTERROR(xgt->logger, "ioctl DMABUF_EXP_WAIT_RELEASED failed");
> + }
> +
> + return rc;
> +}
> +
> +int osdep_gnttab_dmabuf_imp_to_refs(xengnttab_handle *xgt, uint32_t domid,
> + uint32_t fd, uint32_t count, uint32_t
> *refs)
> +{
> + struct ioctl_gntdev_dmabuf_imp_to_refs *to_refs;
> + int rc = 0;
> +
> + if ( !count )
> + {
> + errno = EINVAL;
> + return -1;
Same comments on error handling apply to this function too.
The rest looks fine.
Wei.
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxxx
https://lists.xenproject.org/mailman/listinfo/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |