Re: [PATCH 3/3] drm/etnaviv: submit support for out-fences

2017-03-13 Thread Philipp Zabel
On Wed, 2017-03-08 at 11:48 -0300, Gustavo Padovan wrote:
[...]
> > @@ -437,10 +447,25 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, 
> > void *data,
> > goto out;
> > }
> >  
> > +   if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {
> > +   sync_file = sync_file_create(submit->fence);
> > +   if (!sync_file) {
> > +   dma_fence_put(submit->fence);
> > +   submit->fence = NULL;
> > +   ret = -ENOMEM;
> > +   goto out;
> > +   }
> > +   }
> > +
> > ret = etnaviv_gpu_submit(gpu, submit, cmdbuf);
> > if (ret == 0)
> > cmdbuf = NULL;
> >  
> > +   if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {
> > +   fd_install(out_fence_fd, sync_file->file);
> > +   }
> 
> Extra braces here.

I'll drop those next time.

> Otherwise looks good to me.
> 
> Reviewed-by: Gustavo Padovan 

thanks
Philipp

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


Re: [PATCH 3/3] drm/etnaviv: submit support for out-fences

2017-03-08 Thread Gustavo Padovan
Hi Philipp,

2017-03-08 Philipp Zabel :

> Based on commit 4cd0945901a6 ("drm/msm: submit support for out-fences").
> We increment the minor driver version so userspace can detect explicit
> fence support.
> 
> Signed-off-by: Philipp Zabel 
> ---
>  drivers/gpu/drm/etnaviv/etnaviv_drv.c|  2 +-
>  drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 27 +++
>  include/uapi/drm/etnaviv_drm.h   |  6 --
>  3 files changed, 32 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c 
> b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> index 587e45043542b..00f7e9acf68ad 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
> @@ -512,7 +512,7 @@ static struct drm_driver etnaviv_drm_driver = {
>   .desc   = "etnaviv DRM",
>   .date   = "20151214",
>   .major  = 1,
> - .minor  = 0,
> + .minor  = 1,
>  };
>  
>  /*
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c 
> b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> index 022fcc7d57f48..7d4dc946104b9 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> @@ -307,6 +307,8 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void 
> *data,
>   struct etnaviv_cmdbuf *cmdbuf;
>   struct etnaviv_gpu *gpu;
>   struct dma_fence *in_fence = NULL;
> + struct sync_file *sync_file = NULL;
> + int out_fence_fd = -1;
>   void *stream;
>   int ret;
>  
> @@ -374,6 +376,14 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, 
> void *data,
>   goto err_submit_cmds;
>   }
>  
> + if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {
> + out_fence_fd = get_unused_fd_flags(O_CLOEXEC);
> + if (out_fence_fd < 0) {
> + ret = out_fence_fd;
> + goto err_submit_cmds;
> + }
> + }
> +
>   submit = submit_create(dev, gpu, args->nr_bos);
>   if (!submit) {
>   ret = -ENOMEM;
> @@ -437,10 +447,25 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, 
> void *data,
>   goto out;
>   }
>  
> + if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {
> + sync_file = sync_file_create(submit->fence);
> + if (!sync_file) {
> + dma_fence_put(submit->fence);
> + submit->fence = NULL;
> + ret = -ENOMEM;
> + goto out;
> + }
> + }
> +
>   ret = etnaviv_gpu_submit(gpu, submit, cmdbuf);
>   if (ret == 0)
>   cmdbuf = NULL;
>  
> + if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {
> + fd_install(out_fence_fd, sync_file->file);
> + }

Extra braces here.

Otherwise looks good to me.

Reviewed-by: Gustavo Padovan 

Gustavo

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel


[PATCH 3/3] drm/etnaviv: submit support for out-fences

2017-03-08 Thread Philipp Zabel
Based on commit 4cd0945901a6 ("drm/msm: submit support for out-fences").
We increment the minor driver version so userspace can detect explicit
fence support.

Signed-off-by: Philipp Zabel 
---
 drivers/gpu/drm/etnaviv/etnaviv_drv.c|  2 +-
 drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 27 +++
 include/uapi/drm/etnaviv_drm.h   |  6 --
 3 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_drv.c 
b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
index 587e45043542b..00f7e9acf68ad 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_drv.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_drv.c
@@ -512,7 +512,7 @@ static struct drm_driver etnaviv_drm_driver = {
.desc   = "etnaviv DRM",
.date   = "20151214",
.major  = 1,
-   .minor  = 0,
+   .minor  = 1,
 };
 
 /*
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c 
b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
index 022fcc7d57f48..7d4dc946104b9 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
@@ -307,6 +307,8 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void 
*data,
struct etnaviv_cmdbuf *cmdbuf;
struct etnaviv_gpu *gpu;
struct dma_fence *in_fence = NULL;
+   struct sync_file *sync_file = NULL;
+   int out_fence_fd = -1;
void *stream;
int ret;
 
@@ -374,6 +376,14 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void 
*data,
goto err_submit_cmds;
}
 
+   if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {
+   out_fence_fd = get_unused_fd_flags(O_CLOEXEC);
+   if (out_fence_fd < 0) {
+   ret = out_fence_fd;
+   goto err_submit_cmds;
+   }
+   }
+
submit = submit_create(dev, gpu, args->nr_bos);
if (!submit) {
ret = -ENOMEM;
@@ -437,10 +447,25 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void 
*data,
goto out;
}
 
+   if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {
+   sync_file = sync_file_create(submit->fence);
+   if (!sync_file) {
+   dma_fence_put(submit->fence);
+   submit->fence = NULL;
+   ret = -ENOMEM;
+   goto out;
+   }
+   }
+
ret = etnaviv_gpu_submit(gpu, submit, cmdbuf);
if (ret == 0)
cmdbuf = NULL;
 
+   if (args->flags & ETNA_SUBMIT_FENCE_FD_OUT) {
+   fd_install(out_fence_fd, sync_file->file);
+   }
+
+   args->fence_fd = out_fence_fd;
args->fence = submit->fence->seqno;
 
 out:
@@ -460,6 +485,8 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void 
*data,
submit_cleanup(submit);
 
 err_submit_cmds:
+   if (ret && (out_fence_fd >= 0))
+   put_unused_fd(out_fence_fd);
/* if we still own the cmdbuf */
if (cmdbuf)
etnaviv_cmdbuf_free(cmdbuf);
diff --git a/include/uapi/drm/etnaviv_drm.h b/include/uapi/drm/etnaviv_drm.h
index e9c388a1d8ebe..76f6f78a352ba 100644
--- a/include/uapi/drm/etnaviv_drm.h
+++ b/include/uapi/drm/etnaviv_drm.h
@@ -156,8 +156,10 @@ struct drm_etnaviv_gem_submit_bo {
  */
 #define ETNA_SUBMIT_NO_IMPLICIT 0x0001
 #define ETNA_SUBMIT_FENCE_FD_IN 0x0002
+#define ETNA_SUBMIT_FENCE_FD_OUT0x0004
 #define ETNA_SUBMIT_FLAGS  (ETNA_SUBMIT_NO_IMPLICIT | \
-ETNA_SUBMIT_FENCE_FD_IN)
+ETNA_SUBMIT_FENCE_FD_IN | \
+ETNA_SUBMIT_FENCE_FD_OUT)
 #define ETNA_PIPE_3D  0x00
 #define ETNA_PIPE_2D  0x01
 #define ETNA_PIPE_VG  0x02
@@ -172,7 +174,7 @@ struct drm_etnaviv_gem_submit {
__u64 relocs; /* in, ptr to array of submit_reloc's */
__u64 stream; /* in, ptr to cmdstream */
__u32 flags;  /* in, mask of ETNA_SUBMIT_x */
-   __s32 fence_fd;   /* in, fence fd (see ETNA_SUBMIT_FENCE_FD_IN) */
+   __s32 fence_fd;   /* in/out, fence fd (see ETNA_SUBMIT_FENCE_FD_x) 
*/
 };
 
 /* The normal way to synchronize with the GPU is just to CPU_PREP on
-- 
2.11.0

___
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel