All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace
@ 2017-10-24 13:55 Christian König
  2017-10-24 13:55 ` [PATCH 2/2] dma-buf: try to replace a signaled fence in reservation_object_add_shared_inplace Christian König
  2017-10-25  6:42 ` [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace Chunming Zhou
  0 siblings, 2 replies; 7+ messages in thread
From: Christian König @ 2017-10-24 13:55 UTC (permalink / raw)
  To: sumit.semwal, dri-devel, amd-gfx, zhoucm1

From: Christian König <christian.koenig@amd.com>

The amdgpu issue to also need signaled fences in the reservation objects
should be fixed by now.

Optimize the list by keeping only the not signaled yet fences around.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/dma-buf/reservation.c | 31 +++++++++++++++++++++----------
 1 file changed, 21 insertions(+), 10 deletions(-)

diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c
index b44d9d7db347..4ede77d1bb31 100644
--- a/drivers/dma-buf/reservation.c
+++ b/drivers/dma-buf/reservation.c
@@ -145,8 +145,8 @@ reservation_object_add_shared_replace(struct reservation_object *obj,
 				      struct reservation_object_list *fobj,
 				      struct dma_fence *fence)
 {
-	unsigned i;
 	struct dma_fence *old_fence = NULL;
+	unsigned i, j, k;
 
 	dma_fence_get(fence);
 
@@ -162,9 +162,7 @@ reservation_object_add_shared_replace(struct reservation_object *obj,
 	 * references from the old struct are carried over to
 	 * the new.
 	 */
-	fobj->shared_count = old->shared_count;
-
-	for (i = 0; i < old->shared_count; ++i) {
+	for (i = 0, j = 0, k = old->shared_count; i < old->shared_count; ++i) {
 		struct dma_fence *check;
 
 		check = rcu_dereference_protected(old->shared[i],
@@ -172,10 +170,14 @@ reservation_object_add_shared_replace(struct reservation_object *obj,
 
 		if (!old_fence && check->context == fence->context) {
 			old_fence = check;
-			RCU_INIT_POINTER(fobj->shared[i], fence);
-		} else
-			RCU_INIT_POINTER(fobj->shared[i], check);
+			RCU_INIT_POINTER(fobj->shared[j++], fence);
+		} else if (!dma_fence_is_signaled(check)) {
+			RCU_INIT_POINTER(fobj->shared[j++], check);
+		} else {
+			RCU_INIT_POINTER(fobj->shared[--k], check);
+		}
 	}
+	fobj->shared_count = j;
 	if (!old_fence) {
 		RCU_INIT_POINTER(fobj->shared[fobj->shared_count], fence);
 		fobj->shared_count++;
@@ -192,10 +194,19 @@ reservation_object_add_shared_replace(struct reservation_object *obj,
 	write_seqcount_end(&obj->seq);
 	preempt_enable();
 
-	if (old)
-		kfree_rcu(old, rcu);
-
 	dma_fence_put(old_fence);
+
+	if (!old)
+		return;
+
+	for (i = fobj->shared_count; i < old->shared_count; ++i) {
+		struct dma_fence *f;
+
+		f = rcu_dereference_protected(fobj->shared[i],
+					      reservation_object_held(obj));
+		dma_fence_put(f);
+	}
+	kfree_rcu(old, rcu);
 }
 
 /**
-- 
2.11.0

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

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

* [PATCH 2/2] dma-buf: try to replace a signaled fence in reservation_object_add_shared_inplace
  2017-10-24 13:55 [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace Christian König
@ 2017-10-24 13:55 ` Christian König
  2017-10-25  6:42 ` [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace Chunming Zhou
  1 sibling, 0 replies; 7+ messages in thread
From: Christian König @ 2017-10-24 13:55 UTC (permalink / raw)
  To: sumit.semwal, dri-devel, amd-gfx, zhoucm1

From: Christian König <christian.koenig@amd.com>

The amdgpu issue to also need signaled fences in the reservation objects should
be fixed by now.

Optimize the handling by replacing a signaled fence when adding a new
shared one.

Signed-off-by: Christian König <christian.koenig@amd.com>
---
 drivers/dma-buf/reservation.c | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c
index 4ede77d1bb31..702ef03a923a 100644
--- a/drivers/dma-buf/reservation.c
+++ b/drivers/dma-buf/reservation.c
@@ -104,7 +104,8 @@ reservation_object_add_shared_inplace(struct reservation_object *obj,
 				      struct reservation_object_list *fobj,
 				      struct dma_fence *fence)
 {
-	u32 i;
+	struct dma_fence *signaled = NULL;
+	u32 i, signaled_idx;
 
 	dma_fence_get(fence);
 
@@ -126,17 +127,28 @@ reservation_object_add_shared_inplace(struct reservation_object *obj,
 			dma_fence_put(old_fence);
 			return;
 		}
+
+		if (!signaled && dma_fence_is_signaled(old_fence)) {
+			signaled = old_fence;
+			signaled_idx = i;
+		}
 	}
 
 	/*
 	 * memory barrier is added by write_seqcount_begin,
 	 * fobj->shared_count is protected by this lock too
 	 */
-	RCU_INIT_POINTER(fobj->shared[fobj->shared_count], fence);
-	fobj->shared_count++;
+	if (signaled) {
+		RCU_INIT_POINTER(fobj->shared[signaled_idx], fence);
+	} else {
+		RCU_INIT_POINTER(fobj->shared[fobj->shared_count], fence);
+		fobj->shared_count++;
+	}
 
 	write_seqcount_end(&obj->seq);
 	preempt_enable();
+
+	dma_fence_put(signaled);
 }
 
 static void
-- 
2.11.0

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

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

* Re: [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace
  2017-10-24 13:55 [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace Christian König
  2017-10-24 13:55 ` [PATCH 2/2] dma-buf: try to replace a signaled fence in reservation_object_add_shared_inplace Christian König
@ 2017-10-25  6:42 ` Chunming Zhou
       [not found]   ` <5985440d-0928-31c1-4044-0e4ce3385f91-5C7GfCeVMHo@public.gmane.org>
  1 sibling, 1 reply; 7+ messages in thread
From: Chunming Zhou @ 2017-10-25  6:42 UTC (permalink / raw)
  To: Christian König, sumit.semwal, dri-devel, amd-gfx



On 2017年10月24日 21:55, Christian König wrote:
> From: Christian König <christian.koenig@amd.com>
>
> The amdgpu issue to also need signaled fences in the reservation objects
> should be fixed by now.
>
> Optimize the list by keeping only the not signaled yet fences around.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
>   drivers/dma-buf/reservation.c | 31 +++++++++++++++++++++----------
>   1 file changed, 21 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/dma-buf/reservation.c b/drivers/dma-buf/reservation.c
> index b44d9d7db347..4ede77d1bb31 100644
> --- a/drivers/dma-buf/reservation.c
> +++ b/drivers/dma-buf/reservation.c
> @@ -145,8 +145,8 @@ reservation_object_add_shared_replace(struct reservation_object *obj,
>   				      struct reservation_object_list *fobj,
>   				      struct dma_fence *fence)
>   {
> -	unsigned i;
>   	struct dma_fence *old_fence = NULL;
> +	unsigned i, j, k;
>   
>   	dma_fence_get(fence);
>   
> @@ -162,9 +162,7 @@ reservation_object_add_shared_replace(struct reservation_object *obj,
>   	 * references from the old struct are carried over to
>   	 * the new.
>   	 */
> -	fobj->shared_count = old->shared_count;
> -
> -	for (i = 0; i < old->shared_count; ++i) {
> +	for (i = 0, j = 0, k = old->shared_count; i < old->shared_count; ++i) {
>   		struct dma_fence *check;
>   
>   		check = rcu_dereference_protected(old->shared[i],
> @@ -172,10 +170,14 @@ reservation_object_add_shared_replace(struct reservation_object *obj,
>   
>   		if (!old_fence && check->context == fence->context) {
>   			old_fence = check;
> -			RCU_INIT_POINTER(fobj->shared[i], fence);
> -		} else
> -			RCU_INIT_POINTER(fobj->shared[i], check);
> +			RCU_INIT_POINTER(fobj->shared[j++], fence);
> +		} else if (!dma_fence_is_signaled(check)) {
> +			RCU_INIT_POINTER(fobj->shared[j++], check);
> +		} else {
> +			RCU_INIT_POINTER(fobj->shared[--k], check);
> +		}
>   	}
> +	fobj->shared_count = j;
>   	if (!old_fence) {
>   		RCU_INIT_POINTER(fobj->shared[fobj->shared_count], fence);
Here there is a memory leak for signaled fence slots, since you re-order 
the slots, the j'th slot is storing signaled fence, there is no place to 
put it when you assign to new one.
you cam move it to end or put it here first.

Regards,
David Zhou
>   		fobj->shared_count++;
> @@ -192,10 +194,19 @@ reservation_object_add_shared_replace(struct reservation_object *obj,
>   	write_seqcount_end(&obj->seq);
>   	preempt_enable();
>   
> -	if (old)
> -		kfree_rcu(old, rcu);
> -
>   	dma_fence_put(old_fence);
> +
> +	if (!old)
> +		return;
> +
> +	for (i = fobj->shared_count; i < old->shared_count; ++i) {
> +		struct dma_fence *f;
> +
> +		f = rcu_dereference_protected(fobj->shared[i],
> +					      reservation_object_held(obj));
> +		dma_fence_put(f);
> +	}
> +	kfree_rcu(old, rcu);
>   }
>   
>   /**

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

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

* Re: [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace
       [not found]   ` <5985440d-0928-31c1-4044-0e4ce3385f91-5C7GfCeVMHo@public.gmane.org>
@ 2017-10-25  7:28     ` Christian König
  2017-10-31  7:26       ` Chunming Zhou
  0 siblings, 1 reply; 7+ messages in thread
From: Christian König @ 2017-10-25  7:28 UTC (permalink / raw)
  To: Chunming Zhou, sumit.semwal-QSEj5FYQhm4dnm+yROfE0A,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Am 25.10.2017 um 08:42 schrieb Chunming Zhou:
>
>
> On 2017年10月24日 21:55, Christian König wrote:
>> From: Christian König <christian.koenig@amd.com>
>>
>> The amdgpu issue to also need signaled fences in the reservation objects
>> should be fixed by now.
>>
>> Optimize the list by keeping only the not signaled yet fences around.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>>   drivers/dma-buf/reservation.c | 31 +++++++++++++++++++++----------
>>   1 file changed, 21 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/dma-buf/reservation.c 
>> b/drivers/dma-buf/reservation.c
>> index b44d9d7db347..4ede77d1bb31 100644
>> --- a/drivers/dma-buf/reservation.c
>> +++ b/drivers/dma-buf/reservation.c
>> @@ -145,8 +145,8 @@ reservation_object_add_shared_replace(struct 
>> reservation_object *obj,
>>                         struct reservation_object_list *fobj,
>>                         struct dma_fence *fence)
>>   {
>> -    unsigned i;
>>       struct dma_fence *old_fence = NULL;
>> +    unsigned i, j, k;
>>         dma_fence_get(fence);
>>   @@ -162,9 +162,7 @@ reservation_object_add_shared_replace(struct 
>> reservation_object *obj,
>>        * references from the old struct are carried over to
>>        * the new.
>>        */
>> -    fobj->shared_count = old->shared_count;
>> -
>> -    for (i = 0; i < old->shared_count; ++i) {
>> +    for (i = 0, j = 0, k = old->shared_count; i < old->shared_count; 
>> ++i) {
>>           struct dma_fence *check;
>>             check = rcu_dereference_protected(old->shared[i],
>> @@ -172,10 +170,14 @@ reservation_object_add_shared_replace(struct 
>> reservation_object *obj,
>>             if (!old_fence && check->context == fence->context) {
>>               old_fence = check;
>> -            RCU_INIT_POINTER(fobj->shared[i], fence);
>> -        } else
>> -            RCU_INIT_POINTER(fobj->shared[i], check);
>> +            RCU_INIT_POINTER(fobj->shared[j++], fence);
>> +        } else if (!dma_fence_is_signaled(check)) {
>> +            RCU_INIT_POINTER(fobj->shared[j++], check);
>> +        } else {
>> +            RCU_INIT_POINTER(fobj->shared[--k], check);
>> +        }
>>       }
>> +    fobj->shared_count = j;
>>       if (!old_fence) {
>> RCU_INIT_POINTER(fobj->shared[fobj->shared_count], fence);
> Here there is a memory leak for signaled fence slots, since you 
> re-order the slots, the j'th slot is storing signaled fence, there is 
> no place to put it when you assign to new one.
> you cam move it to end or put it here first.

Good point, thanks. Going to respin.

Regards,
Christian.

>
> Regards,
> David Zhou
>>           fobj->shared_count++;
>> @@ -192,10 +194,19 @@ reservation_object_add_shared_replace(struct 
>> reservation_object *obj,
>>       write_seqcount_end(&obj->seq);
>>       preempt_enable();
>>   -    if (old)
>> -        kfree_rcu(old, rcu);
>> -
>>       dma_fence_put(old_fence);
>> +
>> +    if (!old)
>> +        return;
>> +
>> +    for (i = fobj->shared_count; i < old->shared_count; ++i) {
>> +        struct dma_fence *f;
>> +
>> +        f = rcu_dereference_protected(fobj->shared[i],
>> +                          reservation_object_held(obj));
>> +        dma_fence_put(f);
>> +    }
>> +    kfree_rcu(old, rcu);
>>   }
>>     /**
>

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

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

* Re: [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace
  2017-10-25  7:28     ` Christian König
@ 2017-10-31  7:26       ` Chunming Zhou
       [not found]         ` <ef041966-340b-1ac0-a658-c4e2693a03c2-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 7+ messages in thread
From: Chunming Zhou @ 2017-10-31  7:26 UTC (permalink / raw)
  To: christian.koenig, sumit.semwal, dri-devel, amd-gfx

Any update?


On 2017年10月25日 15:28, Christian König wrote:
> Am 25.10.2017 um 08:42 schrieb Chunming Zhou:
>>
>>
>> On 2017年10月24日 21:55, Christian König wrote:
>>> From: Christian König <christian.koenig@amd.com>
>>>
>>> The amdgpu issue to also need signaled fences in the reservation 
>>> objects
>>> should be fixed by now.
>>>
>>> Optimize the list by keeping only the not signaled yet fences around.
>>>
>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>> ---
>>>   drivers/dma-buf/reservation.c | 31 +++++++++++++++++++++----------
>>>   1 file changed, 21 insertions(+), 10 deletions(-)
>>>
>>> diff --git a/drivers/dma-buf/reservation.c 
>>> b/drivers/dma-buf/reservation.c
>>> index b44d9d7db347..4ede77d1bb31 100644
>>> --- a/drivers/dma-buf/reservation.c
>>> +++ b/drivers/dma-buf/reservation.c
>>> @@ -145,8 +145,8 @@ reservation_object_add_shared_replace(struct 
>>> reservation_object *obj,
>>>                         struct reservation_object_list *fobj,
>>>                         struct dma_fence *fence)
>>>   {
>>> -    unsigned i;
>>>       struct dma_fence *old_fence = NULL;
>>> +    unsigned i, j, k;
>>>         dma_fence_get(fence);
>>>   @@ -162,9 +162,7 @@ reservation_object_add_shared_replace(struct 
>>> reservation_object *obj,
>>>        * references from the old struct are carried over to
>>>        * the new.
>>>        */
>>> -    fobj->shared_count = old->shared_count;
>>> -
>>> -    for (i = 0; i < old->shared_count; ++i) {
>>> +    for (i = 0, j = 0, k = old->shared_count; i < 
>>> old->shared_count; ++i) {
>>>           struct dma_fence *check;
>>>             check = rcu_dereference_protected(old->shared[i],
>>> @@ -172,10 +170,14 @@ reservation_object_add_shared_replace(struct 
>>> reservation_object *obj,
>>>             if (!old_fence && check->context == fence->context) {
>>>               old_fence = check;
>>> -            RCU_INIT_POINTER(fobj->shared[i], fence);
>>> -        } else
>>> -            RCU_INIT_POINTER(fobj->shared[i], check);
>>> +            RCU_INIT_POINTER(fobj->shared[j++], fence);
>>> +        } else if (!dma_fence_is_signaled(check)) {
>>> +            RCU_INIT_POINTER(fobj->shared[j++], check);
>>> +        } else {
>>> +            RCU_INIT_POINTER(fobj->shared[--k], check);
>>> +        }
>>>       }
>>> +    fobj->shared_count = j;
>>>       if (!old_fence) {
>>> RCU_INIT_POINTER(fobj->shared[fobj->shared_count], fence);
>> Here there is a memory leak for signaled fence slots, since you 
>> re-order the slots, the j'th slot is storing signaled fence, there is 
>> no place to put it when you assign to new one.
>> you cam move it to end or put it here first.
>
> Good point, thanks. Going to respin.
>
> Regards,
> Christian.
>
>>
>> Regards,
>> David Zhou
>>>           fobj->shared_count++;
>>> @@ -192,10 +194,19 @@ reservation_object_add_shared_replace(struct 
>>> reservation_object *obj,
>>>       write_seqcount_end(&obj->seq);
>>>       preempt_enable();
>>>   -    if (old)
>>> -        kfree_rcu(old, rcu);
>>> -
>>>       dma_fence_put(old_fence);
>>> +
>>> +    if (!old)
>>> +        return;
>>> +
>>> +    for (i = fobj->shared_count; i < old->shared_count; ++i) {
>>> +        struct dma_fence *f;
>>> +
>>> +        f = rcu_dereference_protected(fobj->shared[i],
>>> +                          reservation_object_held(obj));
>>> +        dma_fence_put(f);
>>> +    }
>>> +    kfree_rcu(old, rcu);
>>>   }
>>>     /**
>>
>

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

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

* Re: [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace
       [not found]         ` <ef041966-340b-1ac0-a658-c4e2693a03c2-5C7GfCeVMHo@public.gmane.org>
@ 2017-10-31  8:42           ` Christian König
  2017-10-31  8:45             ` Michel Dänzer
  0 siblings, 1 reply; 7+ messages in thread
From: Christian König @ 2017-10-31  8:42 UTC (permalink / raw)
  To: Chunming Zhou, christian.koenig-5C7GfCeVMHo,
	sumit.semwal-QSEj5FYQhm4dnm+yROfE0A,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Looks like v2 never made it to the list. I've just send the V2 patches 
once more.

Christian.

Am 31.10.2017 um 08:26 schrieb Chunming Zhou:
> Any update?
>
>
> On 2017年10月25日 15:28, Christian König wrote:
>> Am 25.10.2017 um 08:42 schrieb Chunming Zhou:
>>>
>>>
>>> On 2017年10月24日 21:55, Christian König wrote:
>>>> From: Christian König <christian.koenig@amd.com>
>>>>
>>>> The amdgpu issue to also need signaled fences in the reservation 
>>>> objects
>>>> should be fixed by now.
>>>>
>>>> Optimize the list by keeping only the not signaled yet fences around.
>>>>
>>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>>> ---
>>>>   drivers/dma-buf/reservation.c | 31 +++++++++++++++++++++----------
>>>>   1 file changed, 21 insertions(+), 10 deletions(-)
>>>>
>>>> diff --git a/drivers/dma-buf/reservation.c 
>>>> b/drivers/dma-buf/reservation.c
>>>> index b44d9d7db347..4ede77d1bb31 100644
>>>> --- a/drivers/dma-buf/reservation.c
>>>> +++ b/drivers/dma-buf/reservation.c
>>>> @@ -145,8 +145,8 @@ reservation_object_add_shared_replace(struct 
>>>> reservation_object *obj,
>>>>                         struct reservation_object_list *fobj,
>>>>                         struct dma_fence *fence)
>>>>   {
>>>> -    unsigned i;
>>>>       struct dma_fence *old_fence = NULL;
>>>> +    unsigned i, j, k;
>>>>         dma_fence_get(fence);
>>>>   @@ -162,9 +162,7 @@ reservation_object_add_shared_replace(struct 
>>>> reservation_object *obj,
>>>>        * references from the old struct are carried over to
>>>>        * the new.
>>>>        */
>>>> -    fobj->shared_count = old->shared_count;
>>>> -
>>>> -    for (i = 0; i < old->shared_count; ++i) {
>>>> +    for (i = 0, j = 0, k = old->shared_count; i < 
>>>> old->shared_count; ++i) {
>>>>           struct dma_fence *check;
>>>>             check = rcu_dereference_protected(old->shared[i],
>>>> @@ -172,10 +170,14 @@ reservation_object_add_shared_replace(struct 
>>>> reservation_object *obj,
>>>>             if (!old_fence && check->context == fence->context) {
>>>>               old_fence = check;
>>>> -            RCU_INIT_POINTER(fobj->shared[i], fence);
>>>> -        } else
>>>> -            RCU_INIT_POINTER(fobj->shared[i], check);
>>>> +            RCU_INIT_POINTER(fobj->shared[j++], fence);
>>>> +        } else if (!dma_fence_is_signaled(check)) {
>>>> +            RCU_INIT_POINTER(fobj->shared[j++], check);
>>>> +        } else {
>>>> +            RCU_INIT_POINTER(fobj->shared[--k], check);
>>>> +        }
>>>>       }
>>>> +    fobj->shared_count = j;
>>>>       if (!old_fence) {
>>>> RCU_INIT_POINTER(fobj->shared[fobj->shared_count], fence);
>>> Here there is a memory leak for signaled fence slots, since you 
>>> re-order the slots, the j'th slot is storing signaled fence, there 
>>> is no place to put it when you assign to new one.
>>> you cam move it to end or put it here first.
>>
>> Good point, thanks. Going to respin.
>>
>> Regards,
>> Christian.
>>
>>>
>>> Regards,
>>> David Zhou
>>>>           fobj->shared_count++;
>>>> @@ -192,10 +194,19 @@ reservation_object_add_shared_replace(struct 
>>>> reservation_object *obj,
>>>>       write_seqcount_end(&obj->seq);
>>>>       preempt_enable();
>>>>   -    if (old)
>>>> -        kfree_rcu(old, rcu);
>>>> -
>>>>       dma_fence_put(old_fence);
>>>> +
>>>> +    if (!old)
>>>> +        return;
>>>> +
>>>> +    for (i = fobj->shared_count; i < old->shared_count; ++i) {
>>>> +        struct dma_fence *f;
>>>> +
>>>> +        f = rcu_dereference_protected(fobj->shared[i],
>>>> +                          reservation_object_held(obj));
>>>> +        dma_fence_put(f);
>>>> +    }
>>>> +    kfree_rcu(old, rcu);
>>>>   }
>>>>     /**
>>>
>>
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx


_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

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

* Re: [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace
  2017-10-31  8:42           ` Christian König
@ 2017-10-31  8:45             ` Michel Dänzer
  0 siblings, 0 replies; 7+ messages in thread
From: Michel Dänzer @ 2017-10-31  8:45 UTC (permalink / raw)
  To: christian.koenig, Chunming Zhou, sumit.semwal; +Cc: amd-gfx, dri-devel

On 31/10/17 09:42 AM, Christian König wrote:
> Looks like v2 never made it to the list. I've just send the V2 patches
> once more.

FWIW, I received your v2 patches yesterday, and now twice today.


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

end of thread, other threads:[~2017-10-31  8:45 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-10-24 13:55 [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace Christian König
2017-10-24 13:55 ` [PATCH 2/2] dma-buf: try to replace a signaled fence in reservation_object_add_shared_inplace Christian König
2017-10-25  6:42 ` [PATCH 1/2] dma-buf: keep only not signaled fence in reservation_object_add_shared_replace Chunming Zhou
     [not found]   ` <5985440d-0928-31c1-4044-0e4ce3385f91-5C7GfCeVMHo@public.gmane.org>
2017-10-25  7:28     ` Christian König
2017-10-31  7:26       ` Chunming Zhou
     [not found]         ` <ef041966-340b-1ac0-a658-c4e2693a03c2-5C7GfCeVMHo@public.gmane.org>
2017-10-31  8:42           ` Christian König
2017-10-31  8:45             ` Michel Dänzer

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.