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@xxxxxxxxxxxxxx> Reviewed-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> 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); > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel