All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/syncobj: extend syncobj query ability v3
@ 2019-07-30 13:02 Chunming Zhou
  2019-07-30 13:17 ` Koenig, Christian
  0 siblings, 1 reply; 8+ messages in thread
From: Chunming Zhou @ 2019-07-30 13:02 UTC (permalink / raw)
  To: dri-devel; +Cc: Christian König

user space needs a flexiable query ability.
So that umd can get last signaled or submitted point.
v2:
add sanitizer checking.
v3:
rebase

Change-Id: I6512b430524ebabe715e602a2bf5abb0a7e780ea
Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Cc: Christian König <Christian.Koenig@amd.com>
Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
---
 drivers/gpu/drm/drm_syncobj.c | 37 +++++++++++++++++++++--------------
 include/uapi/drm/drm.h        |  3 ++-
 2 files changed, 24 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
index cecff2e447b1..d4432f1513ac 100644
--- a/drivers/gpu/drm/drm_syncobj.c
+++ b/drivers/gpu/drm/drm_syncobj.c
@@ -1197,7 +1197,7 @@ drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data,
 	if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
 		return -EOPNOTSUPP;
 
-	if (args->pad != 0)
+	if (args->flags != 0)
 		return -EINVAL;
 
 	if (args->count_handles == 0)
@@ -1268,7 +1268,7 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
 	if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
 		return -EOPNOTSUPP;
 
-	if (args->pad != 0)
+	if (args->flags & ~DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED)
 		return -EINVAL;
 
 	if (args->count_handles == 0)
@@ -1289,25 +1289,32 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
 		fence = drm_syncobj_fence_get(syncobjs[i]);
 		chain = to_dma_fence_chain(fence);
 		if (chain) {
-			struct dma_fence *iter, *last_signaled = NULL;
-
-			dma_fence_chain_for_each(iter, fence) {
-				if (iter->context != fence->context) {
-					dma_fence_put(iter);
-					/* It is most likely that timeline has
-					 * unorder points. */
-					break;
+			struct dma_fence *iter, *last_signaled =
+				dma_fence_get(fence);
+
+			if (args->flags &
+			    DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED) {
+				point = fence->seqno;
+			} else {
+				dma_fence_chain_for_each(iter, fence) {
+					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);
 				}
-				dma_fence_put(last_signaled);
-				last_signaled = dma_fence_get(iter);
+				point = dma_fence_is_signaled(last_signaled) ?
+					last_signaled->seqno :
+					to_dma_fence_chain(last_signaled)->prev_seqno;
 			}
-			point = dma_fence_is_signaled(last_signaled) ?
-				last_signaled->seqno :
-				to_dma_fence_chain(last_signaled)->prev_seqno;
 			dma_fence_put(last_signaled);
 		} else {
 			point = 0;
 		}
+		dma_fence_put(fence);
 		ret = copy_to_user(&points[i], &point, sizeof(uint64_t));
 		ret = ret ? -EFAULT : 0;
 		if (ret)
diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
index 661d73f9a919..fd987ce24d9f 100644
--- a/include/uapi/drm/drm.h
+++ b/include/uapi/drm/drm.h
@@ -777,11 +777,12 @@ struct drm_syncobj_array {
 	__u32 pad;
 };
 
+#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */
 struct drm_syncobj_timeline_array {
 	__u64 handles;
 	__u64 points;
 	__u32 count_handles;
-	__u32 pad;
+	__u32 flags;
 };
 
 
-- 
2.17.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/syncobj: extend syncobj query ability v3
  2019-07-30 13:02 [PATCH] drm/syncobj: extend syncobj query ability v3 Chunming Zhou
@ 2019-07-30 13:17 ` Koenig, Christian
  2019-07-30 13:22   ` Chunming Zhou
  2019-07-30 13:25   ` Lionel Landwerlin
  0 siblings, 2 replies; 8+ messages in thread
From: Koenig, Christian @ 2019-07-30 13:17 UTC (permalink / raw)
  To: Zhou, David(ChunMing), dri-devel, Lionel Landwerlin

Am 30.07.19 um 15:02 schrieb Chunming Zhou:
> user space needs a flexiable query ability.
> So that umd can get last signaled or submitted point.
> v2:
> add sanitizer checking.
> v3:
> rebase
>
> Change-Id: I6512b430524ebabe715e602a2bf5abb0a7e780ea
> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> Cc: Christian König <Christian.Koenig@amd.com>
> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>

Reviewed-by: Christian König <cristian.koenig@amd.com>

Lionel is the Intel code using this already public? Or David any chance 
that we can get a public amdvlk release using this?

Christian.

> ---
>   drivers/gpu/drm/drm_syncobj.c | 37 +++++++++++++++++++++--------------
>   include/uapi/drm/drm.h        |  3 ++-
>   2 files changed, 24 insertions(+), 16 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
> index cecff2e447b1..d4432f1513ac 100644
> --- a/drivers/gpu/drm/drm_syncobj.c
> +++ b/drivers/gpu/drm/drm_syncobj.c
> @@ -1197,7 +1197,7 @@ drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data,
>   	if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
>   		return -EOPNOTSUPP;
>   
> -	if (args->pad != 0)
> +	if (args->flags != 0)
>   		return -EINVAL;
>   
>   	if (args->count_handles == 0)
> @@ -1268,7 +1268,7 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
>   	if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
>   		return -EOPNOTSUPP;
>   
> -	if (args->pad != 0)
> +	if (args->flags & ~DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED)
>   		return -EINVAL;
>   
>   	if (args->count_handles == 0)
> @@ -1289,25 +1289,32 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
>   		fence = drm_syncobj_fence_get(syncobjs[i]);
>   		chain = to_dma_fence_chain(fence);
>   		if (chain) {
> -			struct dma_fence *iter, *last_signaled = NULL;
> -
> -			dma_fence_chain_for_each(iter, fence) {
> -				if (iter->context != fence->context) {
> -					dma_fence_put(iter);
> -					/* It is most likely that timeline has
> -					 * unorder points. */
> -					break;
> +			struct dma_fence *iter, *last_signaled =
> +				dma_fence_get(fence);
> +
> +			if (args->flags &
> +			    DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED) {
> +				point = fence->seqno;
> +			} else {
> +				dma_fence_chain_for_each(iter, fence) {
> +					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);
>   				}
> -				dma_fence_put(last_signaled);
> -				last_signaled = dma_fence_get(iter);
> +				point = dma_fence_is_signaled(last_signaled) ?
> +					last_signaled->seqno :
> +					to_dma_fence_chain(last_signaled)->prev_seqno;
>   			}
> -			point = dma_fence_is_signaled(last_signaled) ?
> -				last_signaled->seqno :
> -				to_dma_fence_chain(last_signaled)->prev_seqno;
>   			dma_fence_put(last_signaled);
>   		} else {
>   			point = 0;
>   		}
> +		dma_fence_put(fence);
>   		ret = copy_to_user(&points[i], &point, sizeof(uint64_t));
>   		ret = ret ? -EFAULT : 0;
>   		if (ret)
> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
> index 661d73f9a919..fd987ce24d9f 100644
> --- a/include/uapi/drm/drm.h
> +++ b/include/uapi/drm/drm.h
> @@ -777,11 +777,12 @@ struct drm_syncobj_array {
>   	__u32 pad;
>   };
>   
> +#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */
>   struct drm_syncobj_timeline_array {
>   	__u64 handles;
>   	__u64 points;
>   	__u32 count_handles;
> -	__u32 pad;
> +	__u32 flags;
>   };
>   
>   

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/syncobj: extend syncobj query ability v3
  2019-07-30 13:17 ` Koenig, Christian
@ 2019-07-30 13:22   ` Chunming Zhou
  2019-10-23 20:21     ` Sean Paul
  2019-07-30 13:25   ` Lionel Landwerlin
  1 sibling, 1 reply; 8+ messages in thread
From: Chunming Zhou @ 2019-07-30 13:22 UTC (permalink / raw)
  To: Koenig, Christian, Zhou, David(ChunMing), dri-devel, Lionel Landwerlin


在 2019/7/30 21:17, Koenig, Christian 写道:
> Am 30.07.19 um 15:02 schrieb Chunming Zhou:
>> user space needs a flexiable query ability.
>> So that umd can get last signaled or submitted point.
>> v2:
>> add sanitizer checking.
>> v3:
>> rebase
>>
>> Change-Id: I6512b430524ebabe715e602a2bf5abb0a7e780ea
>> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
>> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
>> Cc: Christian König <Christian.Koenig@amd.com>
>> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> Reviewed-by: Christian König <cristian.koenig@amd.com>
>
> Lionel is the Intel code using this already public? Or David any chance
> that we can get a public amdvlk release using this?

In latest public amdvlk, We should be able to see how timeline syncobj 
is used in it.


-David

>
> Christian.
>
>> ---
>>    drivers/gpu/drm/drm_syncobj.c | 37 +++++++++++++++++++++--------------
>>    include/uapi/drm/drm.h        |  3 ++-
>>    2 files changed, 24 insertions(+), 16 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
>> index cecff2e447b1..d4432f1513ac 100644
>> --- a/drivers/gpu/drm/drm_syncobj.c
>> +++ b/drivers/gpu/drm/drm_syncobj.c
>> @@ -1197,7 +1197,7 @@ drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data,
>>    	if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
>>    		return -EOPNOTSUPP;
>>    
>> -	if (args->pad != 0)
>> +	if (args->flags != 0)
>>    		return -EINVAL;
>>    
>>    	if (args->count_handles == 0)
>> @@ -1268,7 +1268,7 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
>>    	if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
>>    		return -EOPNOTSUPP;
>>    
>> -	if (args->pad != 0)
>> +	if (args->flags & ~DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED)
>>    		return -EINVAL;
>>    
>>    	if (args->count_handles == 0)
>> @@ -1289,25 +1289,32 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
>>    		fence = drm_syncobj_fence_get(syncobjs[i]);
>>    		chain = to_dma_fence_chain(fence);
>>    		if (chain) {
>> -			struct dma_fence *iter, *last_signaled = NULL;
>> -
>> -			dma_fence_chain_for_each(iter, fence) {
>> -				if (iter->context != fence->context) {
>> -					dma_fence_put(iter);
>> -					/* It is most likely that timeline has
>> -					 * unorder points. */
>> -					break;
>> +			struct dma_fence *iter, *last_signaled =
>> +				dma_fence_get(fence);
>> +
>> +			if (args->flags &
>> +			    DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED) {
>> +				point = fence->seqno;
>> +			} else {
>> +				dma_fence_chain_for_each(iter, fence) {
>> +					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);
>>    				}
>> -				dma_fence_put(last_signaled);
>> -				last_signaled = dma_fence_get(iter);
>> +				point = dma_fence_is_signaled(last_signaled) ?
>> +					last_signaled->seqno :
>> +					to_dma_fence_chain(last_signaled)->prev_seqno;
>>    			}
>> -			point = dma_fence_is_signaled(last_signaled) ?
>> -				last_signaled->seqno :
>> -				to_dma_fence_chain(last_signaled)->prev_seqno;
>>    			dma_fence_put(last_signaled);
>>    		} else {
>>    			point = 0;
>>    		}
>> +		dma_fence_put(fence);
>>    		ret = copy_to_user(&points[i], &point, sizeof(uint64_t));
>>    		ret = ret ? -EFAULT : 0;
>>    		if (ret)
>> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
>> index 661d73f9a919..fd987ce24d9f 100644
>> --- a/include/uapi/drm/drm.h
>> +++ b/include/uapi/drm/drm.h
>> @@ -777,11 +777,12 @@ struct drm_syncobj_array {
>>    	__u32 pad;
>>    };
>>    
>> +#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */
>>    struct drm_syncobj_timeline_array {
>>    	__u64 handles;
>>    	__u64 points;
>>    	__u32 count_handles;
>> -	__u32 pad;
>> +	__u32 flags;
>>    };
>>    
>>    
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/syncobj: extend syncobj query ability v3
  2019-07-30 13:17 ` Koenig, Christian
  2019-07-30 13:22   ` Chunming Zhou
@ 2019-07-30 13:25   ` Lionel Landwerlin
  1 sibling, 0 replies; 8+ messages in thread
From: Lionel Landwerlin @ 2019-07-30 13:25 UTC (permalink / raw)
  To: Koenig, Christian, Zhou, David(ChunMing), dri-devel

On 30/07/2019 16:17, Koenig, Christian wrote:
> Am 30.07.19 um 15:02 schrieb Chunming Zhou:
>> user space needs a flexiable query ability.
>> So that umd can get last signaled or submitted point.
>> v2:
>> add sanitizer checking.
>> v3:
>> rebase
>>
>> Change-Id: I6512b430524ebabe715e602a2bf5abb0a7e780ea
>> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
>> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
>> Cc: Christian König <Christian.Koenig@amd.com>
>> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> Reviewed-by: Christian König <cristian.koenig@amd.com>
>
> Lionel is the Intel code using this already public? Or David any chance
> that we can get a public amdvlk release using this?
>
> Christian.


The Khronos specification for timeline semaphore isn't public yet 
unfortunately, which is blocking the release of code associated with the 
whole timeline stuff.

We also have no use for this feature currently in the Anv driver.


-Lionel


>
>> ---
>>    drivers/gpu/drm/drm_syncobj.c | 37 +++++++++++++++++++++--------------
>>    include/uapi/drm/drm.h        |  3 ++-
>>    2 files changed, 24 insertions(+), 16 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
>> index cecff2e447b1..d4432f1513ac 100644
>> --- a/drivers/gpu/drm/drm_syncobj.c
>> +++ b/drivers/gpu/drm/drm_syncobj.c
>> @@ -1197,7 +1197,7 @@ drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data,
>>    	if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
>>    		return -EOPNOTSUPP;
>>    
>> -	if (args->pad != 0)
>> +	if (args->flags != 0)
>>    		return -EINVAL;
>>    
>>    	if (args->count_handles == 0)
>> @@ -1268,7 +1268,7 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
>>    	if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
>>    		return -EOPNOTSUPP;
>>    
>> -	if (args->pad != 0)
>> +	if (args->flags & ~DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED)
>>    		return -EINVAL;
>>    
>>    	if (args->count_handles == 0)
>> @@ -1289,25 +1289,32 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
>>    		fence = drm_syncobj_fence_get(syncobjs[i]);
>>    		chain = to_dma_fence_chain(fence);
>>    		if (chain) {
>> -			struct dma_fence *iter, *last_signaled = NULL;
>> -
>> -			dma_fence_chain_for_each(iter, fence) {
>> -				if (iter->context != fence->context) {
>> -					dma_fence_put(iter);
>> -					/* It is most likely that timeline has
>> -					 * unorder points. */
>> -					break;
>> +			struct dma_fence *iter, *last_signaled =
>> +				dma_fence_get(fence);
>> +
>> +			if (args->flags &
>> +			    DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED) {
>> +				point = fence->seqno;
>> +			} else {
>> +				dma_fence_chain_for_each(iter, fence) {
>> +					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);
>>    				}
>> -				dma_fence_put(last_signaled);
>> -				last_signaled = dma_fence_get(iter);
>> +				point = dma_fence_is_signaled(last_signaled) ?
>> +					last_signaled->seqno :
>> +					to_dma_fence_chain(last_signaled)->prev_seqno;
>>    			}
>> -			point = dma_fence_is_signaled(last_signaled) ?
>> -				last_signaled->seqno :
>> -				to_dma_fence_chain(last_signaled)->prev_seqno;
>>    			dma_fence_put(last_signaled);
>>    		} else {
>>    			point = 0;
>>    		}
>> +		dma_fence_put(fence);
>>    		ret = copy_to_user(&points[i], &point, sizeof(uint64_t));
>>    		ret = ret ? -EFAULT : 0;
>>    		if (ret)
>> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
>> index 661d73f9a919..fd987ce24d9f 100644
>> --- a/include/uapi/drm/drm.h
>> +++ b/include/uapi/drm/drm.h
>> @@ -777,11 +777,12 @@ struct drm_syncobj_array {
>>    	__u32 pad;
>>    };
>>    
>> +#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */
>>    struct drm_syncobj_timeline_array {
>>    	__u64 handles;
>>    	__u64 points;
>>    	__u32 count_handles;
>> -	__u32 pad;
>> +	__u32 flags;
>>    };
>>    
>>    


_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/syncobj: extend syncobj query ability v3
  2019-07-30 13:22   ` Chunming Zhou
@ 2019-10-23 20:21     ` Sean Paul
  2019-10-24 11:48         ` Daniel Vetter
  2019-10-24 13:19       ` Chunming Zhou
  0 siblings, 2 replies; 8+ messages in thread
From: Sean Paul @ 2019-10-23 20:21 UTC (permalink / raw)
  To: Chunming Zhou; +Cc: Koenig, Christian, dri-devel

On Tue, Jul 30, 2019 at 9:22 AM Chunming Zhou <zhoucm1@amd.com> wrote:
>
>
> 在 2019/7/30 21:17, Koenig, Christian 写道:
> > Am 30.07.19 um 15:02 schrieb Chunming Zhou:
> >> user space needs a flexiable query ability.
> >> So that umd can get last signaled or submitted point.
> >> v2:
> >> add sanitizer checking.
> >> v3:
> >> rebase
> >>
> >> Change-Id: I6512b430524ebabe715e602a2bf5abb0a7e780ea
> >> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
> >> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> >> Cc: Christian König <Christian.Koenig@amd.com>
> >> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> > Reviewed-by: Christian König <cristian.koenig@amd.com>
> >
> > Lionel is the Intel code using this already public? Or David any chance
> > that we can get a public amdvlk release using this?
>
> In latest public amdvlk, We should be able to see how timeline syncobj
> is used in it.
>

I couldn't find this anywhere, could you please provide a link?

Sean

>
> -David
>
> >
> > Christian.
> >
> >> ---
> >>    drivers/gpu/drm/drm_syncobj.c | 37 +++++++++++++++++++++--------------
> >>    include/uapi/drm/drm.h        |  3 ++-
> >>    2 files changed, 24 insertions(+), 16 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
> >> index cecff2e447b1..d4432f1513ac 100644
> >> --- a/drivers/gpu/drm/drm_syncobj.c
> >> +++ b/drivers/gpu/drm/drm_syncobj.c
> >> @@ -1197,7 +1197,7 @@ drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data,
> >>      if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
> >>              return -EOPNOTSUPP;
> >>
> >> -    if (args->pad != 0)
> >> +    if (args->flags != 0)
> >>              return -EINVAL;
> >>
> >>      if (args->count_handles == 0)
> >> @@ -1268,7 +1268,7 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
> >>      if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
> >>              return -EOPNOTSUPP;
> >>
> >> -    if (args->pad != 0)
> >> +    if (args->flags & ~DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED)
> >>              return -EINVAL;
> >>
> >>      if (args->count_handles == 0)
> >> @@ -1289,25 +1289,32 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
> >>              fence = drm_syncobj_fence_get(syncobjs[i]);
> >>              chain = to_dma_fence_chain(fence);
> >>              if (chain) {
> >> -                    struct dma_fence *iter, *last_signaled = NULL;
> >> -
> >> -                    dma_fence_chain_for_each(iter, fence) {
> >> -                            if (iter->context != fence->context) {
> >> -                                    dma_fence_put(iter);
> >> -                                    /* It is most likely that timeline has
> >> -                                     * unorder points. */
> >> -                                    break;
> >> +                    struct dma_fence *iter, *last_signaled =
> >> +                            dma_fence_get(fence);
> >> +
> >> +                    if (args->flags &
> >> +                        DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED) {
> >> +                            point = fence->seqno;
> >> +                    } else {
> >> +                            dma_fence_chain_for_each(iter, fence) {
> >> +                                    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);
> >>                              }
> >> -                            dma_fence_put(last_signaled);
> >> -                            last_signaled = dma_fence_get(iter);
> >> +                            point = dma_fence_is_signaled(last_signaled) ?
> >> +                                    last_signaled->seqno :
> >> +                                    to_dma_fence_chain(last_signaled)->prev_seqno;
> >>                      }
> >> -                    point = dma_fence_is_signaled(last_signaled) ?
> >> -                            last_signaled->seqno :
> >> -                            to_dma_fence_chain(last_signaled)->prev_seqno;
> >>                      dma_fence_put(last_signaled);
> >>              } else {
> >>                      point = 0;
> >>              }
> >> +            dma_fence_put(fence);
> >>              ret = copy_to_user(&points[i], &point, sizeof(uint64_t));
> >>              ret = ret ? -EFAULT : 0;
> >>              if (ret)
> >> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
> >> index 661d73f9a919..fd987ce24d9f 100644
> >> --- a/include/uapi/drm/drm.h
> >> +++ b/include/uapi/drm/drm.h
> >> @@ -777,11 +777,12 @@ struct drm_syncobj_array {
> >>      __u32 pad;
> >>    };
> >>
> >> +#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */
> >>    struct drm_syncobj_timeline_array {
> >>      __u64 handles;
> >>      __u64 points;
> >>      __u32 count_handles;
> >> -    __u32 pad;
> >> +    __u32 flags;
> >>    };
> >>
> >>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/syncobj: extend syncobj query ability v3
@ 2019-10-24 11:48         ` Daniel Vetter
  0 siblings, 0 replies; 8+ messages in thread
From: Daniel Vetter @ 2019-10-24 11:48 UTC (permalink / raw)
  To: Sean Paul, Bas Nieuwenhuizen, Dave Airlie
  Cc: Chunming Zhou, Koenig, Christian, dri-devel

On Wed, Oct 23, 2019 at 10:22 PM Sean Paul <sean@poorly.run> wrote:
>
> On Tue, Jul 30, 2019 at 9:22 AM Chunming Zhou <zhoucm1@amd.com> wrote:
> >
> >
> > 在 2019/7/30 21:17, Koenig, Christian 写道:
> > > Am 30.07.19 um 15:02 schrieb Chunming Zhou:
> > >> user space needs a flexiable query ability.
> > >> So that umd can get last signaled or submitted point.
> > >> v2:
> > >> add sanitizer checking.
> > >> v3:
> > >> rebase
> > >>
> > >> Change-Id: I6512b430524ebabe715e602a2bf5abb0a7e780ea
> > >> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
> > >> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> > >> Cc: Christian König <Christian.Koenig@amd.com>
> > >> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> > > Reviewed-by: Christian König <cristian.koenig@amd.com>
> > >
> > > Lionel is the Intel code using this already public? Or David any chance
> > > that we can get a public amdvlk release using this?
> >
> > In latest public amdvlk, We should be able to see how timeline syncobj
> > is used in it.
> >
>
> I couldn't find this anywhere, could you please provide a link?

I thought there was also a radv implementation somewhere ... adding
some of the usual suspects for that.
-Daniel

>
> Sean
>
> >
> > -David
> >
> > >
> > > Christian.
> > >
> > >> ---
> > >>    drivers/gpu/drm/drm_syncobj.c | 37 +++++++++++++++++++++--------------
> > >>    include/uapi/drm/drm.h        |  3 ++-
> > >>    2 files changed, 24 insertions(+), 16 deletions(-)
> > >>
> > >> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
> > >> index cecff2e447b1..d4432f1513ac 100644
> > >> --- a/drivers/gpu/drm/drm_syncobj.c
> > >> +++ b/drivers/gpu/drm/drm_syncobj.c
> > >> @@ -1197,7 +1197,7 @@ drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data,
> > >>      if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
> > >>              return -EOPNOTSUPP;
> > >>
> > >> -    if (args->pad != 0)
> > >> +    if (args->flags != 0)
> > >>              return -EINVAL;
> > >>
> > >>      if (args->count_handles == 0)
> > >> @@ -1268,7 +1268,7 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
> > >>      if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
> > >>              return -EOPNOTSUPP;
> > >>
> > >> -    if (args->pad != 0)
> > >> +    if (args->flags & ~DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED)
> > >>              return -EINVAL;
> > >>
> > >>      if (args->count_handles == 0)
> > >> @@ -1289,25 +1289,32 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
> > >>              fence = drm_syncobj_fence_get(syncobjs[i]);
> > >>              chain = to_dma_fence_chain(fence);
> > >>              if (chain) {
> > >> -                    struct dma_fence *iter, *last_signaled = NULL;
> > >> -
> > >> -                    dma_fence_chain_for_each(iter, fence) {
> > >> -                            if (iter->context != fence->context) {
> > >> -                                    dma_fence_put(iter);
> > >> -                                    /* It is most likely that timeline has
> > >> -                                     * unorder points. */
> > >> -                                    break;
> > >> +                    struct dma_fence *iter, *last_signaled =
> > >> +                            dma_fence_get(fence);
> > >> +
> > >> +                    if (args->flags &
> > >> +                        DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED) {
> > >> +                            point = fence->seqno;
> > >> +                    } else {
> > >> +                            dma_fence_chain_for_each(iter, fence) {
> > >> +                                    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);
> > >>                              }
> > >> -                            dma_fence_put(last_signaled);
> > >> -                            last_signaled = dma_fence_get(iter);
> > >> +                            point = dma_fence_is_signaled(last_signaled) ?
> > >> +                                    last_signaled->seqno :
> > >> +                                    to_dma_fence_chain(last_signaled)->prev_seqno;
> > >>                      }
> > >> -                    point = dma_fence_is_signaled(last_signaled) ?
> > >> -                            last_signaled->seqno :
> > >> -                            to_dma_fence_chain(last_signaled)->prev_seqno;
> > >>                      dma_fence_put(last_signaled);
> > >>              } else {
> > >>                      point = 0;
> > >>              }
> > >> +            dma_fence_put(fence);
> > >>              ret = copy_to_user(&points[i], &point, sizeof(uint64_t));
> > >>              ret = ret ? -EFAULT : 0;
> > >>              if (ret)
> > >> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
> > >> index 661d73f9a919..fd987ce24d9f 100644
> > >> --- a/include/uapi/drm/drm.h
> > >> +++ b/include/uapi/drm/drm.h
> > >> @@ -777,11 +777,12 @@ struct drm_syncobj_array {
> > >>      __u32 pad;
> > >>    };
> > >>
> > >> +#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */
> > >>    struct drm_syncobj_timeline_array {
> > >>      __u64 handles;
> > >>      __u64 points;
> > >>      __u32 count_handles;
> > >> -    __u32 pad;
> > >> +    __u32 flags;
> > >>    };
> > >>
> > >>
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/syncobj: extend syncobj query ability v3
@ 2019-10-24 11:48         ` Daniel Vetter
  0 siblings, 0 replies; 8+ messages in thread
From: Daniel Vetter @ 2019-10-24 11:48 UTC (permalink / raw)
  To: Sean Paul, Bas Nieuwenhuizen, Dave Airlie
  Cc: Chunming Zhou, Koenig, Christian, dri-devel

On Wed, Oct 23, 2019 at 10:22 PM Sean Paul <sean@poorly.run> wrote:
>
> On Tue, Jul 30, 2019 at 9:22 AM Chunming Zhou <zhoucm1@amd.com> wrote:
> >
> >
> > 在 2019/7/30 21:17, Koenig, Christian 写道:
> > > Am 30.07.19 um 15:02 schrieb Chunming Zhou:
> > >> user space needs a flexiable query ability.
> > >> So that umd can get last signaled or submitted point.
> > >> v2:
> > >> add sanitizer checking.
> > >> v3:
> > >> rebase
> > >>
> > >> Change-Id: I6512b430524ebabe715e602a2bf5abb0a7e780ea
> > >> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
> > >> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> > >> Cc: Christian König <Christian.Koenig@amd.com>
> > >> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
> > > Reviewed-by: Christian König <cristian.koenig@amd.com>
> > >
> > > Lionel is the Intel code using this already public? Or David any chance
> > > that we can get a public amdvlk release using this?
> >
> > In latest public amdvlk, We should be able to see how timeline syncobj
> > is used in it.
> >
>
> I couldn't find this anywhere, could you please provide a link?

I thought there was also a radv implementation somewhere ... adding
some of the usual suspects for that.
-Daniel

>
> Sean
>
> >
> > -David
> >
> > >
> > > Christian.
> > >
> > >> ---
> > >>    drivers/gpu/drm/drm_syncobj.c | 37 +++++++++++++++++++++--------------
> > >>    include/uapi/drm/drm.h        |  3 ++-
> > >>    2 files changed, 24 insertions(+), 16 deletions(-)
> > >>
> > >> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
> > >> index cecff2e447b1..d4432f1513ac 100644
> > >> --- a/drivers/gpu/drm/drm_syncobj.c
> > >> +++ b/drivers/gpu/drm/drm_syncobj.c
> > >> @@ -1197,7 +1197,7 @@ drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data,
> > >>      if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
> > >>              return -EOPNOTSUPP;
> > >>
> > >> -    if (args->pad != 0)
> > >> +    if (args->flags != 0)
> > >>              return -EINVAL;
> > >>
> > >>      if (args->count_handles == 0)
> > >> @@ -1268,7 +1268,7 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
> > >>      if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
> > >>              return -EOPNOTSUPP;
> > >>
> > >> -    if (args->pad != 0)
> > >> +    if (args->flags & ~DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED)
> > >>              return -EINVAL;
> > >>
> > >>      if (args->count_handles == 0)
> > >> @@ -1289,25 +1289,32 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
> > >>              fence = drm_syncobj_fence_get(syncobjs[i]);
> > >>              chain = to_dma_fence_chain(fence);
> > >>              if (chain) {
> > >> -                    struct dma_fence *iter, *last_signaled = NULL;
> > >> -
> > >> -                    dma_fence_chain_for_each(iter, fence) {
> > >> -                            if (iter->context != fence->context) {
> > >> -                                    dma_fence_put(iter);
> > >> -                                    /* It is most likely that timeline has
> > >> -                                     * unorder points. */
> > >> -                                    break;
> > >> +                    struct dma_fence *iter, *last_signaled =
> > >> +                            dma_fence_get(fence);
> > >> +
> > >> +                    if (args->flags &
> > >> +                        DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED) {
> > >> +                            point = fence->seqno;
> > >> +                    } else {
> > >> +                            dma_fence_chain_for_each(iter, fence) {
> > >> +                                    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);
> > >>                              }
> > >> -                            dma_fence_put(last_signaled);
> > >> -                            last_signaled = dma_fence_get(iter);
> > >> +                            point = dma_fence_is_signaled(last_signaled) ?
> > >> +                                    last_signaled->seqno :
> > >> +                                    to_dma_fence_chain(last_signaled)->prev_seqno;
> > >>                      }
> > >> -                    point = dma_fence_is_signaled(last_signaled) ?
> > >> -                            last_signaled->seqno :
> > >> -                            to_dma_fence_chain(last_signaled)->prev_seqno;
> > >>                      dma_fence_put(last_signaled);
> > >>              } else {
> > >>                      point = 0;
> > >>              }
> > >> +            dma_fence_put(fence);
> > >>              ret = copy_to_user(&points[i], &point, sizeof(uint64_t));
> > >>              ret = ret ? -EFAULT : 0;
> > >>              if (ret)
> > >> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
> > >> index 661d73f9a919..fd987ce24d9f 100644
> > >> --- a/include/uapi/drm/drm.h
> > >> +++ b/include/uapi/drm/drm.h
> > >> @@ -777,11 +777,12 @@ struct drm_syncobj_array {
> > >>      __u32 pad;
> > >>    };
> > >>
> > >> +#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */
> > >>    struct drm_syncobj_timeline_array {
> > >>      __u64 handles;
> > >>      __u64 points;
> > >>      __u32 count_handles;
> > >> -    __u32 pad;
> > >> +    __u32 flags;
> > >>    };
> > >>
> > >>
> > _______________________________________________
> > dri-devel mailing list
> > dri-devel@lists.freedesktop.org
> > https://lists.freedesktop.org/mailman/listinfo/dri-devel
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH] drm/syncobj: extend syncobj query ability v3
  2019-10-23 20:21     ` Sean Paul
  2019-10-24 11:48         ` Daniel Vetter
@ 2019-10-24 13:19       ` Chunming Zhou
  1 sibling, 0 replies; 8+ messages in thread
From: Chunming Zhou @ 2019-10-24 13:19 UTC (permalink / raw)
  To: Sean Paul; +Cc: Koenig, Christian, dri-devel


在 2019/10/24 4:21, Sean Paul 写道:
> On Tue, Jul 30, 2019 at 9:22 AM Chunming Zhou <zhoucm1@amd.com> wrote:
>>
>> 在 2019/7/30 21:17, Koenig, Christian 写道:
>>> Am 30.07.19 um 15:02 schrieb Chunming Zhou:
>>>> user space needs a flexiable query ability.
>>>> So that umd can get last signaled or submitted point.
>>>> v2:
>>>> add sanitizer checking.
>>>> v3:
>>>> rebase
>>>>
>>>> Change-Id: I6512b430524ebabe715e602a2bf5abb0a7e780ea
>>>> Signed-off-by: Chunming Zhou <david1.zhou@amd.com>
>>>> Cc: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
>>>> Cc: Christian König <Christian.Koenig@amd.com>
>>>> Reviewed-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
>>> Reviewed-by: Christian König <cristian.koenig@amd.com>
>>>
>>> Lionel is the Intel code using this already public? Or David any chance
>>> that we can get a public amdvlk release using this?
>> In latest public amdvlk, We should be able to see how timeline syncobj
>> is used in it.
>>
> I couldn't find this anywhere, could you please provide a link?

https://github.com/GPUOpen-Drivers/xgl/blob/dev/icd/api/vk_semaphore.cpp

You can check the source here.


Cheers,

-David

>
> Sean
>
>> -David
>>
>>> Christian.
>>>
>>>> ---
>>>>     drivers/gpu/drm/drm_syncobj.c | 37 +++++++++++++++++++++--------------
>>>>     include/uapi/drm/drm.h        |  3 ++-
>>>>     2 files changed, 24 insertions(+), 16 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c
>>>> index cecff2e447b1..d4432f1513ac 100644
>>>> --- a/drivers/gpu/drm/drm_syncobj.c
>>>> +++ b/drivers/gpu/drm/drm_syncobj.c
>>>> @@ -1197,7 +1197,7 @@ drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data,
>>>>       if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
>>>>               return -EOPNOTSUPP;
>>>>
>>>> -    if (args->pad != 0)
>>>> +    if (args->flags != 0)
>>>>               return -EINVAL;
>>>>
>>>>       if (args->count_handles == 0)
>>>> @@ -1268,7 +1268,7 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
>>>>       if (!drm_core_check_feature(dev, DRIVER_SYNCOBJ_TIMELINE))
>>>>               return -EOPNOTSUPP;
>>>>
>>>> -    if (args->pad != 0)
>>>> +    if (args->flags & ~DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED)
>>>>               return -EINVAL;
>>>>
>>>>       if (args->count_handles == 0)
>>>> @@ -1289,25 +1289,32 @@ int drm_syncobj_query_ioctl(struct drm_device *dev, void *data,
>>>>               fence = drm_syncobj_fence_get(syncobjs[i]);
>>>>               chain = to_dma_fence_chain(fence);
>>>>               if (chain) {
>>>> -                    struct dma_fence *iter, *last_signaled = NULL;
>>>> -
>>>> -                    dma_fence_chain_for_each(iter, fence) {
>>>> -                            if (iter->context != fence->context) {
>>>> -                                    dma_fence_put(iter);
>>>> -                                    /* It is most likely that timeline has
>>>> -                                     * unorder points. */
>>>> -                                    break;
>>>> +                    struct dma_fence *iter, *last_signaled =
>>>> +                            dma_fence_get(fence);
>>>> +
>>>> +                    if (args->flags &
>>>> +                        DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED) {
>>>> +                            point = fence->seqno;
>>>> +                    } else {
>>>> +                            dma_fence_chain_for_each(iter, fence) {
>>>> +                                    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);
>>>>                               }
>>>> -                            dma_fence_put(last_signaled);
>>>> -                            last_signaled = dma_fence_get(iter);
>>>> +                            point = dma_fence_is_signaled(last_signaled) ?
>>>> +                                    last_signaled->seqno :
>>>> +                                    to_dma_fence_chain(last_signaled)->prev_seqno;
>>>>                       }
>>>> -                    point = dma_fence_is_signaled(last_signaled) ?
>>>> -                            last_signaled->seqno :
>>>> -                            to_dma_fence_chain(last_signaled)->prev_seqno;
>>>>                       dma_fence_put(last_signaled);
>>>>               } else {
>>>>                       point = 0;
>>>>               }
>>>> +            dma_fence_put(fence);
>>>>               ret = copy_to_user(&points[i], &point, sizeof(uint64_t));
>>>>               ret = ret ? -EFAULT : 0;
>>>>               if (ret)
>>>> diff --git a/include/uapi/drm/drm.h b/include/uapi/drm/drm.h
>>>> index 661d73f9a919..fd987ce24d9f 100644
>>>> --- a/include/uapi/drm/drm.h
>>>> +++ b/include/uapi/drm/drm.h
>>>> @@ -777,11 +777,12 @@ struct drm_syncobj_array {
>>>>       __u32 pad;
>>>>     };
>>>>
>>>> +#define DRM_SYNCOBJ_QUERY_FLAGS_LAST_SUBMITTED (1 << 0) /* last available point on timeline syncobj */
>>>>     struct drm_syncobj_timeline_array {
>>>>       __u64 handles;
>>>>       __u64 points;
>>>>       __u32 count_handles;
>>>> -    __u32 pad;
>>>> +    __u32 flags;
>>>>     };
>>>>
>>>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2019-10-24 13:19 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-07-30 13:02 [PATCH] drm/syncobj: extend syncobj query ability v3 Chunming Zhou
2019-07-30 13:17 ` Koenig, Christian
2019-07-30 13:22   ` Chunming Zhou
2019-10-23 20:21     ` Sean Paul
2019-10-24 11:48       ` Daniel Vetter
2019-10-24 11:48         ` Daniel Vetter
2019-10-24 13:19       ` Chunming Zhou
2019-07-30 13:25   ` Lionel Landwerlin

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.