[Intel-gfx] [PATCH i-g-t 1/4] lib/igt_vgem: extract vgem_create_and_import

Chris Wilson chris at chris-wilson.co.uk
Thu Oct 19 07:53:07 UTC 2017


Quoting Daniele Ceraolo Spurio (2017-10-12 23:30:41)
> The same code to create and import a vgem object is used in a couple of
> places and a couple more are coming up in the next patches so extract
> the code into a common function
> 
> Signed-off-by: Daniele Ceraolo Spurio <daniele.ceraolospurio at intel.com>
> ---
>  lib/igt_dummyload.c | 10 ++--------
>  lib/igt_vgem.c      | 35 +++++++++++++++++++++++++++++++++
>  lib/igt_vgem.h      |  2 ++
>  tests/prime_vgem.c  | 56 +++++++++++++----------------------------------------
>  4 files changed, 52 insertions(+), 51 deletions(-)
> 
> diff --git a/lib/igt_dummyload.c b/lib/igt_dummyload.c
> index 913cc93..03541f7 100644
> --- a/lib/igt_dummyload.c
> +++ b/lib/igt_dummyload.c
> @@ -317,23 +317,17 @@ igt_cork_t *igt_cork_new(int fd)
>  {
>         igt_cork_t *cork;
>         struct vgem_bo bo;
> -       int dmabuf;
>  
>         cork = calloc(1, sizeof(igt_cork_t));
>         igt_assert(cork);
>  
>         cork->device = drm_open_driver(DRIVER_VGEM);
>  
> -       igt_require(vgem_has_fences(cork->device));
> -
>         bo.width = bo.height = 1;
>         bo.bpp = 4;
> -       vgem_create(cork->device, &bo);
> -       cork->fence = vgem_fence_attach(cork->device, &bo, VGEM_FENCE_WRITE);
>  
> -       dmabuf = prime_handle_to_fd(cork->device, bo.handle);
> -       cork->handle = prime_fd_to_handle(fd, dmabuf);
> -       close(dmabuf);
> +       cork->handle = vgem_create_and_import(cork->device, &bo, fd,
> +                                             &cork->fence);
>  
>         return cork;
>  }
> diff --git a/lib/igt_vgem.c b/lib/igt_vgem.c
> index 7f933b2..7fc62f2 100644
> --- a/lib/igt_vgem.c
> +++ b/lib/igt_vgem.c
> @@ -66,6 +66,41 @@ void vgem_create(int fd, struct vgem_bo *bo)
>         igt_assert_eq(__vgem_create(fd, bo), 0);
>  }
>  
> +/**
> + * vgem_create_and_import:
> + * @vgem_fd: open vgem file descriptor
> + * @bo: vgem_bo struct containing width, height and bpp of the object to open
> + * @import_fd: open drm file descriptor to be used to import the vgem bo
> + * @fence: optional return variable to store a fence attached to the vgem bo
> + *
> + * This function creates a vgem bo and imports it to the provided device. If
> + * the fence parameter if provided a fence is attached to the bo and returned.
> + * The provided vgem_bo struct is updated as in vgem_create.
> + *
> + * Returns:
> + * Handle of the imported bo.
> + */
> +uint32_t vgem_create_and_import(int vgem_fd, struct vgem_bo *bo, int import_fd,
> +                               uint32_t *fence)
> +{
> +       int dmabuf;
> +       uint32_t handle;
> +
> +       vgem_create(vgem_fd, bo);
> +
> +       if (fence) {
> +               igt_require(vgem_has_fences(vgem_fd));
> +               *fence = vgem_fence_attach(vgem_fd, bo, VGEM_FENCE_WRITE);
> +       }

Leave this to the caller. Don't have overly specific functions, try to
provide tools for writing future tests.

> +       dmabuf = prime_handle_to_fd(vgem_fd, bo->handle);
> +       handle = prime_fd_to_handle(import_fd, dmabuf);
> +       igt_assert(handle);

Not your concern. Add it to prime_fd_to_handle() if you want.

> +       close(dmabuf);
> +

This is common enough to be refactored,
	import_handle = prime_link(export_fd, export_handle, import_fd);
?

> +       return handle;
> +}


More information about the Intel-gfx mailing list