drm/msm: Move fence put to where failure occurs
PATCH 1/1 drm/msm: Move fence put to where failure occurs
If dma_fence_wait fails to wait for a supplied in-fence in msm_ioctl_gem_submit, make sure we release that in-fence.
Also remove this dma_fence_put() from the 'out' label.
--- drivers/gpu/drm/msm/msm_gem_submit.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)
drivers/gpu/drm/msm/msm_gem_submit.c +5 -5
@@ -411,7 +411,6 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,struct msm_file_private *ctx = file->driver_priv;struct msm_gem_submit *submit;struct msm_gpu *gpu = priv->gpu; -struct dma_fence *in_fence =NULL ;struct sync_file *sync_file =NULL ;struct msm_gpu_submitqueue *queue;struct msm_ringbuffer *ring;
@@ -444,7 +443,8 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, ring = gpu->rb[queue->prio];if (args->flags &MSM_SUBMIT_FENCE_FD_IN ) { - in_fence =sync_file_get_fence (args->fence_fd); +struct dma_fence *in_fence =sync_file_get_fence ( + args->fence_fd);if (!in_fence)return -EINVAL ;
@@ -455,8 +455,10 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,*/ if (!dma_fence_match_context (in_fence, ring->fctx->context)) { ret =dma_fence_wait (in_fence, true); -if (ret) +if (ret) { +dma_fence_put (in_fence);return ret; + } } }
@@ -583,8 +585,6 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, } out: -if (in_fence) -dma_fence_put (in_fence);submit_cleanup (submit);if (ret)msm_gem_submit_free (submit);
Signature · 6 lines
2.17.1 _______________________________________________ Freedreno mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/freedreno
Quoting Robert Foss (2018-11-01 16:12:28)
Quoted 33 lines
If
dma_fence_waitfails to wait for a supplied in-fence inmsm_ioctl_gem_submit, make sure we release that in-fence.Also remove this
dma_fence_put()from the 'out' label.Signed-off-by Robert Foss <[email protected]>--- drivers/gpu/drm/msm/msm_gem_submit.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)drivers/gpu/drm/msm/msm_gem_submit.c +2
-2@@ -411,7 +411,6 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,struct msm_file_private *ctx = file->driver_priv;struct msm_gem_submit *submit;struct msm_gpu *gpu = priv->gpu; -struct dma_fence *in_fence =NULL ;struct sync_file *sync_file =NULL ;struct msm_gpu_submitqueue *queue;struct msm_ringbuffer *ring;@@ -444,7 +443,8 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, ring = gpu->rb[queue->prio];if (args->flags &MSM_SUBMIT_FENCE_FD_IN ) { - in_fence =sync_file_get_fence (args->fence_fd); +struct dma_fence *in_fence =sync_file_get_fence ( + args->fence_fd);if (!in_fence)return -EINVAL ;
drivers/gpu/drm/msm/msm_gem_submit.c int msm_ioctl_gem_submit(struct drm_device *dev, void *data, · line 462
Quoted 9 lines
drivers/gpu/drm/msm/msm_gem_submit.c +3
-1@@ -455,8 +455,10 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,*/ if (!dma_fence_match_context (in_fence, ring->fctx->context)) { ret =dma_fence_wait (in_fence, true); -if (ret) +if (ret) { +dma_fence_put (in_fence);return ret; + } }
Careful, we need to keep the put for the normal path. Maybe,
if (args->flags & MSM_SUBMIT_FENCE_FD_IN) {
struct dma_fence *in_fence;
in_fence = sync_file_get_fence(args->fence_fd); // keep line breaks natural
if (!in_fence)
return -EINVAL;
ret = 0;
if (!dma_fence_match_match_context(in_fence, ring->fctx->context)
ret = dma_fence_wait(in_fence, true);
dma_fence_put(in_fence);
if (ret)
return ret;
}Hey Chris,
Quoted 31 lines · Chris Wilson
Quoting Robert Foss (2018-11-01 16:12:28)
Quoted 30 lines
If
dma_fence_waitfails to wait for a supplied in-fence inmsm_ioctl_gem_submit, make sure we release that in-fence.Also remove this
dma_fence_put()from the 'out' label.Signed-off-by Robert Foss <[email protected]>--- drivers/gpu/drm/msm/msm_gem_submit.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-)drivers/gpu/drm/msm/msm_gem_submit.c +2
-2@@ -411,7 +411,6 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,struct msm_file_private *ctx = file->driver_priv;struct msm_gem_submit *submit;struct msm_gpu *gpu = priv->gpu; -struct dma_fence *in_fence =NULL ;struct sync_file *sync_file =NULL ;struct msm_gpu_submitqueue *queue;struct msm_ringbuffer *ring;@@ -444,7 +443,8 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data, ring = gpu->rb[queue->prio];if (args->flags &MSM_SUBMIT_FENCE_FD_IN ) { - in_fence =sync_file_get_fence (args->fence_fd); +struct dma_fence *in_fence =sync_file_get_fence ( + args->fence_fd);
Quoted 14 lines
drivers/gpu/drm/msm/msm_gem_submit.c int msm_ioctl_gem_submit(struct drm_device *dev, void *data, · line 462
Quoted 12 lines
drivers/gpu/drm/msm/msm_gem_submit.c +3
-1if (!in_fence)return -EINVAL ;@@ -455,8 +455,10 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,*/ if (!dma_fence_match_context (in_fence, ring->fctx->context)) { ret =dma_fence_wait (in_fence, true); -if (ret) +if (ret) { +dma_fence_put (in_fence);return ret; + } }Careful, we need to keep the put for the normal path. Maybe,
Good catch, I'll send out a fixed version tomorrow.
Quoted 15 lines
if (args->flags & MSM_SUBMIT_FENCE_FD_IN) {
struct dma_fence *in_fence;
in_fence = sync_file_get_fence(args->fence_fd); // keep line breaks natural
if (!in_fence)
return -EINVAL;
ret = 0;
if (!dma_fence_match_match_context(in_fence, ring->fctx->context)
ret = dma_fence_wait(in_fence, true);
dma_fence_put(in_fence);
if (ret)
return ret;
}Quoted 5 lines
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel