All of lore.kernel.org
 help / color / mirror / Atom feed
* Two minor etnaviv DMA-buf cleanups
@ 2021-10-25  8:05 Christian König
  2021-10-25  8:05 ` [PATCH 1/2] drm/etnaviv: use new iterator in etnaviv_gem_describe Christian König
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Christian König @ 2021-10-25  8:05 UTC (permalink / raw)
  To: linux+etnaviv, l.stach; +Cc: etnaviv, dri-devel

Hi guys,

just two minor cleanups related to the new DMA-buf iterators. Can I get an rb or ack-by for that?

Thanks,
Christian.



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

* [PATCH 1/2] drm/etnaviv: use new iterator in etnaviv_gem_describe
  2021-10-25  8:05 Two minor etnaviv DMA-buf cleanups Christian König
@ 2021-10-25  8:05 ` Christian König
  2021-10-27  8:58   ` Das, Nirmoy
  2021-10-28 10:02   ` Lucas Stach
  2021-10-25  8:05 ` [PATCH 2/2] drm/etnaviv: replace dma_resv_get_excl_unlocked Christian König
  2021-10-26 11:11 ` Two minor etnaviv DMA-buf cleanups Christian König
  2 siblings, 2 replies; 7+ messages in thread
From: Christian König @ 2021-10-25  8:05 UTC (permalink / raw)
  To: linux+etnaviv, l.stach; +Cc: etnaviv, dri-devel

Instead of hand rolling the logic.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/etnaviv/etnaviv_gem.c | 31 ++++++++++-----------------
 1 file changed, 11 insertions(+), 20 deletions(-)

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
index 8f1b5af47dd6..0eeb33de2ff4 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
@@ -428,19 +428,17 @@ int etnaviv_gem_wait_bo(struct etnaviv_gpu *gpu, struct drm_gem_object *obj,
 static void etnaviv_gem_describe_fence(struct dma_fence *fence,
 	const char *type, struct seq_file *m)
 {
-	if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
-		seq_printf(m, "\t%9s: %s %s seq %llu\n",
-			   type,
-			   fence->ops->get_driver_name(fence),
-			   fence->ops->get_timeline_name(fence),
-			   fence->seqno);
+	seq_printf(m, "\t%9s: %s %s seq %llu\n", type,
+		   fence->ops->get_driver_name(fence),
+		   fence->ops->get_timeline_name(fence),
+		   fence->seqno);
 }
 
 static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
 {
 	struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
 	struct dma_resv *robj = obj->resv;
-	struct dma_resv_list *fobj;
+	struct dma_resv_iter cursor;
 	struct dma_fence *fence;
 	unsigned long off = drm_vma_node_start(&obj->vma_node);
 
@@ -449,21 +447,14 @@ static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
 			obj->name, kref_read(&obj->refcount),
 			off, etnaviv_obj->vaddr, obj->size);
 
-	rcu_read_lock();
-	fobj = dma_resv_shared_list(robj);
-	if (fobj) {
-		unsigned int i, shared_count = fobj->shared_count;
-
-		for (i = 0; i < shared_count; i++) {
-			fence = rcu_dereference(fobj->shared[i]);
+	dma_resv_iter_begin(&cursor, robj, true);
+	dma_resv_for_each_fence_unlocked(&cursor, fence) {
+		if (dma_resv_iter_is_exclusive(&cursor))
+			etnaviv_gem_describe_fence(fence, "Exclusive", m);
+		else
 			etnaviv_gem_describe_fence(fence, "Shared", m);
-		}
 	}
-
-	fence = dma_resv_excl_fence(robj);
-	if (fence)
-		etnaviv_gem_describe_fence(fence, "Exclusive", m);
-	rcu_read_unlock();
+	dma_resv_iter_end(&cursor);
 }
 
 void etnaviv_gem_describe_objects(struct etnaviv_drm_private *priv,
-- 
2.25.1


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

* [PATCH 2/2] drm/etnaviv: replace dma_resv_get_excl_unlocked
  2021-10-25  8:05 Two minor etnaviv DMA-buf cleanups Christian König
  2021-10-25  8:05 ` [PATCH 1/2] drm/etnaviv: use new iterator in etnaviv_gem_describe Christian König
@ 2021-10-25  8:05 ` Christian König
  2021-10-26 11:11 ` Two minor etnaviv DMA-buf cleanups Christian König
  2 siblings, 0 replies; 7+ messages in thread
From: Christian König @ 2021-10-25  8:05 UTC (permalink / raw)
  To: linux+etnaviv, l.stach; +Cc: etnaviv, dri-devel

We certainly hold the reservation lock here, no need for the RCU dance.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
index 4dd7d9d541c0..7e17bc2b5df1 100644
--- a/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
+++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_submit.c
@@ -195,7 +195,7 @@ static int submit_fence_sync(struct etnaviv_gem_submit *submit)
 			if (ret)
 				return ret;
 		} else {
-			bo->excl = dma_resv_get_excl_unlocked(robj);
+			bo->excl = dma_fence_get(dma_resv_excl_fence(robj));
 		}
 
 	}
-- 
2.25.1


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

* Re: Two minor etnaviv DMA-buf cleanups
  2021-10-25  8:05 Two minor etnaviv DMA-buf cleanups Christian König
  2021-10-25  8:05 ` [PATCH 1/2] drm/etnaviv: use new iterator in etnaviv_gem_describe Christian König
  2021-10-25  8:05 ` [PATCH 2/2] drm/etnaviv: replace dma_resv_get_excl_unlocked Christian König
@ 2021-10-26 11:11 ` Christian König
  2 siblings, 0 replies; 7+ messages in thread
From: Christian König @ 2021-10-26 11:11 UTC (permalink / raw)
  To: linux+etnaviv, l.stach, Daniel Vetter; +Cc: etnaviv, dri-devel

Just a gentle ping on those two.

The changes are straight forward and I just need an ack.

Adding Daniel, maybe he has a minute :)

Cheers,
Christian.

Am 25.10.21 um 10:05 schrieb Christian König:
> Hi guys,
>
> just two minor cleanups related to the new DMA-buf iterators. Can I get an rb or ack-by for that?
>
> Thanks,
> Christian.
>
>


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

* Re: [PATCH 1/2] drm/etnaviv: use new iterator in etnaviv_gem_describe
  2021-10-25  8:05 ` [PATCH 1/2] drm/etnaviv: use new iterator in etnaviv_gem_describe Christian König
@ 2021-10-27  8:58   ` Das, Nirmoy
  2021-10-28 10:02   ` Lucas Stach
  1 sibling, 0 replies; 7+ messages in thread
From: Das, Nirmoy @ 2021-10-27  8:58 UTC (permalink / raw)
  To: dri-devel

LGTM,  Acked-by: Nirmoy Das <nirmoy.das@amd.com> for the series.

On 10/25/2021 10:05 AM, Christian König wrote:
> Instead of hand rolling the logic.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>   drivers/gpu/drm/etnaviv/etnaviv_gem.c | 31 ++++++++++-----------------
>   1 file changed, 11 insertions(+), 20 deletions(-)
>
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
> index 8f1b5af47dd6..0eeb33de2ff4 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
> @@ -428,19 +428,17 @@ int etnaviv_gem_wait_bo(struct etnaviv_gpu *gpu, struct drm_gem_object *obj,
>   static void etnaviv_gem_describe_fence(struct dma_fence *fence,
>   	const char *type, struct seq_file *m)
>   {
> -	if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
> -		seq_printf(m, "\t%9s: %s %s seq %llu\n",
> -			   type,
> -			   fence->ops->get_driver_name(fence),
> -			   fence->ops->get_timeline_name(fence),
> -			   fence->seqno);
> +	seq_printf(m, "\t%9s: %s %s seq %llu\n", type,
> +		   fence->ops->get_driver_name(fence),
> +		   fence->ops->get_timeline_name(fence),
> +		   fence->seqno);
>   }
>   
>   static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
>   {
>   	struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
>   	struct dma_resv *robj = obj->resv;
> -	struct dma_resv_list *fobj;
> +	struct dma_resv_iter cursor;
>   	struct dma_fence *fence;
>   	unsigned long off = drm_vma_node_start(&obj->vma_node);
>   
> @@ -449,21 +447,14 @@ static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
>   			obj->name, kref_read(&obj->refcount),
>   			off, etnaviv_obj->vaddr, obj->size);
>   
> -	rcu_read_lock();
> -	fobj = dma_resv_shared_list(robj);
> -	if (fobj) {
> -		unsigned int i, shared_count = fobj->shared_count;
> -
> -		for (i = 0; i < shared_count; i++) {
> -			fence = rcu_dereference(fobj->shared[i]);
> +	dma_resv_iter_begin(&cursor, robj, true);
> +	dma_resv_for_each_fence_unlocked(&cursor, fence) {
> +		if (dma_resv_iter_is_exclusive(&cursor))
> +			etnaviv_gem_describe_fence(fence, "Exclusive", m);
> +		else
>   			etnaviv_gem_describe_fence(fence, "Shared", m);
> -		}
>   	}
> -
> -	fence = dma_resv_excl_fence(robj);
> -	if (fence)
> -		etnaviv_gem_describe_fence(fence, "Exclusive", m);
> -	rcu_read_unlock();
> +	dma_resv_iter_end(&cursor);
>   }
>   
>   void etnaviv_gem_describe_objects(struct etnaviv_drm_private *priv,

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

* Re: [PATCH 1/2] drm/etnaviv: use new iterator in etnaviv_gem_describe
  2021-10-25  8:05 ` [PATCH 1/2] drm/etnaviv: use new iterator in etnaviv_gem_describe Christian König
  2021-10-27  8:58   ` Das, Nirmoy
@ 2021-10-28 10:02   ` Lucas Stach
  2021-10-28 11:01     ` Christian König
  1 sibling, 1 reply; 7+ messages in thread
From: Lucas Stach @ 2021-10-28 10:02 UTC (permalink / raw)
  To: Christian König, linux+etnaviv; +Cc: etnaviv, dri-devel

Am Montag, dem 25.10.2021 um 10:05 +0200 schrieb Christian König:
> Instead of hand rolling the logic.
> 
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>  drivers/gpu/drm/etnaviv/etnaviv_gem.c | 31 ++++++++++-----------------
>  1 file changed, 11 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
> index 8f1b5af47dd6..0eeb33de2ff4 100644
> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
> @@ -428,19 +428,17 @@ int etnaviv_gem_wait_bo(struct etnaviv_gpu *gpu, struct drm_gem_object *obj,
>  static void etnaviv_gem_describe_fence(struct dma_fence *fence,
>  	const char *type, struct seq_file *m)
>  {
> -	if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
> -		seq_printf(m, "\t%9s: %s %s seq %llu\n",
> -			   type,
> -			   fence->ops->get_driver_name(fence),
> -			   fence->ops->get_timeline_name(fence),
> -			   fence->seqno);
> +	seq_printf(m, "\t%9s: %s %s seq %llu\n", type,
> +		   fence->ops->get_driver_name(fence),
> +		   fence->ops->get_timeline_name(fence),
> +		   fence->seqno);

Please just move this in the function below, it seems pretty pointless
now to have a separate function just to wrap the printf.

Other than this nit, both patches are:
Reviewed-by: Lucas Stach <l.stach@pengutronix.de>

>  }
>  
>  static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
>  {
>  	struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
>  	struct dma_resv *robj = obj->resv;
> -	struct dma_resv_list *fobj;
> +	struct dma_resv_iter cursor;
>  	struct dma_fence *fence;
>  	unsigned long off = drm_vma_node_start(&obj->vma_node);
>  
> @@ -449,21 +447,14 @@ static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
>  			obj->name, kref_read(&obj->refcount),
>  			off, etnaviv_obj->vaddr, obj->size);
>  
> -	rcu_read_lock();
> -	fobj = dma_resv_shared_list(robj);
> -	if (fobj) {
> -		unsigned int i, shared_count = fobj->shared_count;
> -
> -		for (i = 0; i < shared_count; i++) {
> -			fence = rcu_dereference(fobj->shared[i]);
> +	dma_resv_iter_begin(&cursor, robj, true);
> +	dma_resv_for_each_fence_unlocked(&cursor, fence) {
> +		if (dma_resv_iter_is_exclusive(&cursor))
> +			etnaviv_gem_describe_fence(fence, "Exclusive", m);
> +		else
>  			etnaviv_gem_describe_fence(fence, "Shared", m);
> -		}
>  	}
> -
> -	fence = dma_resv_excl_fence(robj);
> -	if (fence)
> -		etnaviv_gem_describe_fence(fence, "Exclusive", m);
> -	rcu_read_unlock();
> +	dma_resv_iter_end(&cursor);
>  }
>  
>  void etnaviv_gem_describe_objects(struct etnaviv_drm_private *priv,



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

* Re: [PATCH 1/2] drm/etnaviv: use new iterator in etnaviv_gem_describe
  2021-10-28 10:02   ` Lucas Stach
@ 2021-10-28 11:01     ` Christian König
  0 siblings, 0 replies; 7+ messages in thread
From: Christian König @ 2021-10-28 11:01 UTC (permalink / raw)
  To: Lucas Stach, linux+etnaviv; +Cc: etnaviv, dri-devel



Am 28.10.21 um 12:02 schrieb Lucas Stach:
> Am Montag, dem 25.10.2021 um 10:05 +0200 schrieb Christian König:
>> Instead of hand rolling the logic.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>>   drivers/gpu/drm/etnaviv/etnaviv_gem.c | 31 ++++++++++-----------------
>>   1 file changed, 11 insertions(+), 20 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem.c b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
>> index 8f1b5af47dd6..0eeb33de2ff4 100644
>> --- a/drivers/gpu/drm/etnaviv/etnaviv_gem.c
>> +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem.c
>> @@ -428,19 +428,17 @@ int etnaviv_gem_wait_bo(struct etnaviv_gpu *gpu, struct drm_gem_object *obj,
>>   static void etnaviv_gem_describe_fence(struct dma_fence *fence,
>>   	const char *type, struct seq_file *m)
>>   {
>> -	if (!test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->flags))
>> -		seq_printf(m, "\t%9s: %s %s seq %llu\n",
>> -			   type,
>> -			   fence->ops->get_driver_name(fence),
>> -			   fence->ops->get_timeline_name(fence),
>> -			   fence->seqno);
>> +	seq_printf(m, "\t%9s: %s %s seq %llu\n", type,
>> +		   fence->ops->get_driver_name(fence),
>> +		   fence->ops->get_timeline_name(fence),
>> +		   fence->seqno);
> Please just move this in the function below, it seems pretty pointless
> now to have a separate function just to wrap the printf.

Good point, but I've already gone ahead and pushed this to drm-misc-next 
because I wanted to get the follow up stuff out of the door.

See the mailing lists for the next set of patches which also contains 
"[PATCH 3/4] drm/etnaviv: use dma_resv_describe".

That one provides an unified function in the dma_resv and dma_fence code 
for debugfs dumps of fences.

Can we get that one reviewed and upstream? I think it would be even 
cleaner :)

Thank a lot in advantage,
Christian.

>
> Other than this nit, both patches are:
> Reviewed-by: Lucas Stach <l.stach@pengutronix.de>
>
>>   }
>>   
>>   static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
>>   {
>>   	struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj);
>>   	struct dma_resv *robj = obj->resv;
>> -	struct dma_resv_list *fobj;
>> +	struct dma_resv_iter cursor;
>>   	struct dma_fence *fence;
>>   	unsigned long off = drm_vma_node_start(&obj->vma_node);
>>   
>> @@ -449,21 +447,14 @@ static void etnaviv_gem_describe(struct drm_gem_object *obj, struct seq_file *m)
>>   			obj->name, kref_read(&obj->refcount),
>>   			off, etnaviv_obj->vaddr, obj->size);
>>   
>> -	rcu_read_lock();
>> -	fobj = dma_resv_shared_list(robj);
>> -	if (fobj) {
>> -		unsigned int i, shared_count = fobj->shared_count;
>> -
>> -		for (i = 0; i < shared_count; i++) {
>> -			fence = rcu_dereference(fobj->shared[i]);
>> +	dma_resv_iter_begin(&cursor, robj, true);
>> +	dma_resv_for_each_fence_unlocked(&cursor, fence) {
>> +		if (dma_resv_iter_is_exclusive(&cursor))
>> +			etnaviv_gem_describe_fence(fence, "Exclusive", m);
>> +		else
>>   			etnaviv_gem_describe_fence(fence, "Shared", m);
>> -		}
>>   	}
>> -
>> -	fence = dma_resv_excl_fence(robj);
>> -	if (fence)
>> -		etnaviv_gem_describe_fence(fence, "Exclusive", m);
>> -	rcu_read_unlock();
>> +	dma_resv_iter_end(&cursor);
>>   }
>>   
>>   void etnaviv_gem_describe_objects(struct etnaviv_drm_private *priv,
>


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

end of thread, other threads:[~2021-10-28 11:01 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-25  8:05 Two minor etnaviv DMA-buf cleanups Christian König
2021-10-25  8:05 ` [PATCH 1/2] drm/etnaviv: use new iterator in etnaviv_gem_describe Christian König
2021-10-27  8:58   ` Das, Nirmoy
2021-10-28 10:02   ` Lucas Stach
2021-10-28 11:01     ` Christian König
2021-10-25  8:05 ` [PATCH 2/2] drm/etnaviv: replace dma_resv_get_excl_unlocked Christian König
2021-10-26 11:11 ` Two minor etnaviv DMA-buf cleanups Christian König

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.