[PATCH 7/7] drm/syncobj: use the timeline point in drm_syncobj_find_fence

zhoucm1 zhoucm1 at amd.com
Thu Nov 22 06:52:53 UTC 2018



On 2018年11月15日 19:12, Christian König wrote:
> Implement finding the right timeline point in drm_syncobj_find_fence.
>
> Signed-off-by: Christian König <christian.koenig at amd.com>
> ---
>   drivers/gpu/drm/drm_syncobj.c | 10 +++++++++-
>   1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
> index 589d884ccd58..d42c51520da4 100644
> --- a/drivers/gpu/drm/drm_syncobj.c
> +++ b/drivers/gpu/drm/drm_syncobj.c
> @@ -307,9 +307,17 @@ int drm_syncobj_find_fence(struct drm_file *file_private,
>   		return -ENOENT;
>   
>   	*fence = drm_syncobj_fence_get(syncobj);
> -	if (!*fence) {
> +	if (!*fence)
>   		ret = -EINVAL;
> +
> +	if (!ret && point) {
> +		dma_fence_chain_for_each(*fence) {
> +			if (!to_dma_fence_chain(*fence) ||
> +			    (*fence)->seqno <= point)
> +				break;
This condition isn't enough to find proper point.
For two examples:
a. No garbage collection happens, the points in chain are 
1----3----6----9----12---18---20, if user wants to get point17, then we 
should return node 18.
b. garbage collection happens on point6, chain would be updated to 
1---3---9---12---18---20, if user wants to get point5, then we should 
return node 3, but if user wants to get point 7, then we should return 
node 9.

I still have no idea how to satisfy all these requirements with your 
current chain-fence. All these logic just are same we encountered 
before, we're walking them again. After solving these problems, I guess 
all design is similar as before.

In fact, I don't know what problem previous design has, maybe there are 
some bugs, can't we fix these bugs by time going? Who can make sure his 
implementation never have bugs?


-David
> +		}
>   	}
> +
>   	drm_syncobj_put(syncobj);
>   	return ret;
>   }



More information about the dri-devel mailing list