[PATCH] drm/syncobj: fix leaking dma_fence in drm_syncobj_query_ioctl
Lionel Landwerlin
lionel.g.landwerlin at intel.com
Mon Jul 22 13:16:37 UTC 2019
On 22/07/2019 15:59, Christian König wrote:
> We need to check the context number instead if the previous sequence to detect
> an error and if an error is detected we need to drop the reference to the
> current fence or otherwise would leak it.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
Fixes: 27b575a9aa2f ("drm/syncobj: add timeline payload query ioctl v6")
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin at intel.com>
> ---
> drivers/gpu/drm/drm_syncobj.c | 10 +++++-----
> 1 file changed, 5 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
> index 75cb4bb7619e..1438dcb3ebb1 100644
> --- a/drivers/gpu/drm/drm_syncobj.c
> +++ b/drivers/gpu/drm/drm_syncobj.c
> @@ -1298,14 +1298,14 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
> struct dma_fence *iter, *last_signaled = NULL;
>
> dma_fence_chain_for_each(iter, fence) {
> - if (!iter)
> - break;
> - dma_fence_put(last_signaled);
> - last_signaled = dma_fence_get(iter);
> - if (!to_dma_fence_chain(last_signaled)->prev_seqno)
> + if (iter->context != fence->context) {
> + dma_fence_put(iter);
> /* It is most likely that timeline has
> * unorder points. */
> break;
> + }
> + dma_fence_put(last_signaled);
> + last_signaled = dma_fence_get(iter);
> }
> point = dma_fence_is_signaled(last_signaled) ?
> last_signaled->seqno :
More information about the amd-gfx
mailing list