diff mbox

[18/27] drm/etnaviv: move object unpinning to submit cleanup

Message ID 20171201103624.6565-19-l.stach@pengutronix.de (mailing list archive)
State New, archived
Headers show

Commit Message

Lucas Stach Dec. 1, 2017, 10:36 a.m. UTC
This is safe to call in all paths, as the BO_PINNED flag tells us if the BO
needs unpinning.

Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
---
 drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 33 ++++++++++------------------
 1 file changed, 12 insertions(+), 21 deletions(-)

Comments

Philipp Zabel Dec. 11, 2017, 9:23 a.m. UTC | #1
On Fri, 2017-12-01 at 11:36 +0100, Lucas Stach wrote:
> This is safe to call in all paths, as the BO_PINNED flag tells us if the BO
> needs unpinning.
> 
> Signed-off-by: Lucas Stach <l.stach@pengutronix.de>

Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de>

regards
Philipp

> ---
>  drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 33 ++++++++++------------------
>  1 file changed, 12 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> index 20906c22998c..9b5541207d33 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
> @@ -207,19 +207,6 @@ static void submit_attach_object_fences(struct etnaviv_gem_submit *submit)
>  	}
>  }
>  
> -static void submit_unpin_objects(struct etnaviv_gem_submit *submit)
> -{
> -	int i;
> -
> -	for (i = 0; i < submit->nr_bos; i++) {
> -		if (submit->bos[i].flags & BO_PINNED)
> -			etnaviv_gem_mapping_unreference(submit->bos[i].mapping);
> -
> -		submit->bos[i].mapping = NULL;
> -		submit->bos[i].flags &= ~BO_PINNED;
> -	}
> -}
> -
>  static int submit_pin_objects(struct etnaviv_gem_submit *submit)
>  {
>  	int i, ret = 0;
> @@ -362,6 +349,13 @@ static void submit_cleanup(struct etnaviv_gem_submit *submit)
>  	for (i = 0; i < submit->nr_bos; i++) {
>  		struct etnaviv_gem_object *etnaviv_obj = submit->bos[i].obj;
>  
> +		/* unpin all objects */
> +		if (submit->bos[i].flags & BO_PINNED) {
> +			etnaviv_gem_mapping_unreference(submit->bos[i].mapping);
> +			submit->bos[i].mapping = NULL;
> +			submit->bos[i].flags &= ~BO_PINNED;
> +		}
> +
>  		/* if the GPU submit failed, objects might still be locked */
>  		submit_unlock_object(submit, i);
>  		drm_gem_object_put_unlocked(&etnaviv_obj->base);
> @@ -508,23 +502,23 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
>  
>  	ret = submit_pin_objects(submit);
>  	if (ret)
> -		goto out;
> +		goto err_submit_objects;
>  
>  	ret = submit_reloc(submit, stream, args->stream_size / 4,
>  			   relocs, args->nr_relocs);
>  	if (ret)
> -		goto out;
> +		goto err_submit_objects;
>  
>  	ret = submit_perfmon_validate(submit, cmdbuf, pmrs, args->nr_pmrs);
>  	if (ret)
> -		goto out;
> +		goto err_submit_objects;
>  
>  	memcpy(cmdbuf->vaddr, stream, args->stream_size);
>  	cmdbuf->user_size = ALIGN(args->stream_size, 8);
>  
>  	ret = etnaviv_gpu_submit(gpu, submit, cmdbuf);
>  	if (ret)
> -		goto out;
> +		goto err_submit_objects;
>  
>  	submit_attach_object_fences(submit);
>  
> @@ -540,7 +534,7 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
>  		sync_file = sync_file_create(submit->out_fence);
>  		if (!sync_file) {
>  			ret = -ENOMEM;
> -			goto out;
> +			goto err_submit_objects;
>  		}
>  		fd_install(out_fence_fd, sync_file->file);
>  	}
> @@ -548,9 +542,6 @@ int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
>  	args->fence_fd = out_fence_fd;
>  	args->fence = submit->out_fence->seqno;
>  
> -out:
> -	submit_unpin_objects(submit);
> -
>  err_submit_objects:
>  	submit_cleanup(submit);
>
diff mbox

Patch

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
index 20906c22998c..9b5541207d33 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
@@ -207,19 +207,6 @@  static void submit_attach_object_fences(struct etnaviv_gem_submit *submit)
 	}
 }
 
-static void submit_unpin_objects(struct etnaviv_gem_submit *submit)
-{
-	int i;
-
-	for (i = 0; i < submit->nr_bos; i++) {
-		if (submit->bos[i].flags & BO_PINNED)
-			etnaviv_gem_mapping_unreference(submit->bos[i].mapping);
-
-		submit->bos[i].mapping = NULL;
-		submit->bos[i].flags &= ~BO_PINNED;
-	}
-}
-
 static int submit_pin_objects(struct etnaviv_gem_submit *submit)
 {
 	int i, ret = 0;
@@ -362,6 +349,13 @@  static void submit_cleanup(struct etnaviv_gem_submit *submit)
 	for (i = 0; i < submit->nr_bos; i++) {
 		struct etnaviv_gem_object *etnaviv_obj = submit->bos[i].obj;
 
+		/* unpin all objects */
+		if (submit->bos[i].flags & BO_PINNED) {
+			etnaviv_gem_mapping_unreference(submit->bos[i].mapping);
+			submit->bos[i].mapping = NULL;
+			submit->bos[i].flags &= ~BO_PINNED;
+		}
+
 		/* if the GPU submit failed, objects might still be locked */
 		submit_unlock_object(submit, i);
 		drm_gem_object_put_unlocked(&etnaviv_obj->base);
@@ -508,23 +502,23 @@  int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
 
 	ret = submit_pin_objects(submit);
 	if (ret)
-		goto out;
+		goto err_submit_objects;
 
 	ret = submit_reloc(submit, stream, args->stream_size / 4,
 			   relocs, args->nr_relocs);
 	if (ret)
-		goto out;
+		goto err_submit_objects;
 
 	ret = submit_perfmon_validate(submit, cmdbuf, pmrs, args->nr_pmrs);
 	if (ret)
-		goto out;
+		goto err_submit_objects;
 
 	memcpy(cmdbuf->vaddr, stream, args->stream_size);
 	cmdbuf->user_size = ALIGN(args->stream_size, 8);
 
 	ret = etnaviv_gpu_submit(gpu, submit, cmdbuf);
 	if (ret)
-		goto out;
+		goto err_submit_objects;
 
 	submit_attach_object_fences(submit);
 
@@ -540,7 +534,7 @@  int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
 		sync_file = sync_file_create(submit->out_fence);
 		if (!sync_file) {
 			ret = -ENOMEM;
-			goto out;
+			goto err_submit_objects;
 		}
 		fd_install(out_fence_fd, sync_file->file);
 	}
@@ -548,9 +542,6 @@  int etnaviv_ioctl_gem_submit(struct drm_device *dev, void *data,
 	args->fence_fd = out_fence_fd;
 	args->fence = submit->out_fence->seqno;
 
-out:
-	submit_unpin_objects(submit);
-
 err_submit_objects:
 	submit_cleanup(submit);