Re: [PATCH] drm/ttm: use the parent resv for ghost objects v2

2019-10-24 Thread Christian König

Am 24.10.19 um 12:51 schrieb Zhou, David(ChunMing):

On 2019/10/24 下午6:25, Christian König wrote:

Ping?

Am 18.10.19 um 13:58 schrieb Christian König:

This way the TTM is destroyed with the correct dma_resv object
locked and we can even pipeline imported BO evictions.

v2: Limit this to only cases when the parent object uses a separate
  reservation object as well. This fixes another OOM problem.

Signed-off-by: Christian König 
---
   drivers/gpu/drm/ttm/ttm_bo_util.c | 16 +---
   1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c
b/drivers/gpu/drm/ttm/ttm_bo_util.c
index e030c27f53cf..45e440f80b7b 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -512,7 +512,9 @@ static int ttm_buffer_object_transfer(struct
ttm_buffer_object *bo,
   kref_init(>base.kref);
   fbo->base.destroy = _transfered_destroy;
   fbo->base.acc_size = 0;
-    fbo->base.base.resv = >base.base._resv;
+    if (bo->base.resv == >base._resv)
+    fbo->base.base.resv = >base.base._resv;
+
   dma_resv_init(fbo->base.base.resv);

Doesn't this lead to issue if you force to init parent resv? Otherwise
how to deal with if parent->resv is locking?


Ups, good point. That is indeed a really bad typo added during the 
rebase. Going to fix that.


Thanks,
Christian.





   ret = dma_resv_trylock(fbo->base.base.resv);
   WARN_ON(!ret);
@@ -711,7 +713,7 @@ int ttm_bo_move_accel_cleanup(struct
ttm_buffer_object *bo,
   if (ret)
   return ret;
   -    dma_resv_add_excl_fence(ghost_obj->base.resv, fence);
+    dma_resv_add_excl_fence(_obj->base._resv, fence);
     /**
    * If we're not moving to fixed memory, the TTM object
@@ -724,7 +726,7 @@ int ttm_bo_move_accel_cleanup(struct
ttm_buffer_object *bo,
   else
   bo->ttm = NULL;
   -    ttm_bo_unreserve(ghost_obj);
+    dma_resv_unlock(_obj->base._resv);

fbo->base.base.resv?

-David


   ttm_bo_put(ghost_obj);
   }
   @@ -767,7 +769,7 @@ int ttm_bo_pipeline_move(struct
ttm_buffer_object *bo,
   if (ret)
   return ret;
   -    dma_resv_add_excl_fence(ghost_obj->base.resv, fence);
+    dma_resv_add_excl_fence(_obj->base._resv, fence);
     /**
    * If we're not moving to fixed memory, the TTM object
@@ -780,7 +782,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object
*bo,
   else
   bo->ttm = NULL;
   -    ttm_bo_unreserve(ghost_obj);
+    dma_resv_unlock(_obj->base._resv);
   ttm_bo_put(ghost_obj);
     } else if (from->flags & TTM_MEMTYPE_FLAG_FIXED) {
@@ -836,7 +838,7 @@ int ttm_bo_pipeline_gutting(struct
ttm_buffer_object *bo)
   if (ret)
   return ret;
   -    ret = dma_resv_copy_fences(ghost->base.resv, bo->base.resv);
+    ret = dma_resv_copy_fences(>base._resv, bo->base.resv);
   /* Last resort, wait for the BO to be idle when we are OOM */
   if (ret)
   ttm_bo_wait(bo, false, false);
@@ -845,7 +847,7 @@ int ttm_bo_pipeline_gutting(struct
ttm_buffer_object *bo)
   bo->mem.mem_type = TTM_PL_SYSTEM;
   bo->ttm = NULL;
   -    ttm_bo_unreserve(ghost);
+    dma_resv_unlock(>base._resv);
   ttm_bo_put(ghost);
     return 0;


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

Re: [PATCH] drm/ttm: use the parent resv for ghost objects v2

2019-10-24 Thread Zhou, David(ChunMing)

On 2019/10/24 下午6:25, Christian König wrote:
> Ping?
>
> Am 18.10.19 um 13:58 schrieb Christian König:
>> This way the TTM is destroyed with the correct dma_resv object
>> locked and we can even pipeline imported BO evictions.
>>
>> v2: Limit this to only cases when the parent object uses a separate
>>  reservation object as well. This fixes another OOM problem.
>>
>> Signed-off-by: Christian König 
>> ---
>>   drivers/gpu/drm/ttm/ttm_bo_util.c | 16 +---
>>   1 file changed, 9 insertions(+), 7 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c 
>> b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> index e030c27f53cf..45e440f80b7b 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> @@ -512,7 +512,9 @@ static int ttm_buffer_object_transfer(struct 
>> ttm_buffer_object *bo,
>>   kref_init(>base.kref);
>>   fbo->base.destroy = _transfered_destroy;
>>   fbo->base.acc_size = 0;
>> -    fbo->base.base.resv = >base.base._resv;
>> +    if (bo->base.resv == >base._resv)
>> +    fbo->base.base.resv = >base.base._resv;
>> +
>>   dma_resv_init(fbo->base.base.resv);

Doesn't this lead to issue if you force to init parent resv? Otherwise 
how to deal with if parent->resv is locking?


>>   ret = dma_resv_trylock(fbo->base.base.resv);
>>   WARN_ON(!ret);
>> @@ -711,7 +713,7 @@ int ttm_bo_move_accel_cleanup(struct 
>> ttm_buffer_object *bo,
>>   if (ret)
>>   return ret;
>>   -    dma_resv_add_excl_fence(ghost_obj->base.resv, fence);
>> +    dma_resv_add_excl_fence(_obj->base._resv, fence);
>>     /**
>>    * If we're not moving to fixed memory, the TTM object
>> @@ -724,7 +726,7 @@ int ttm_bo_move_accel_cleanup(struct 
>> ttm_buffer_object *bo,
>>   else
>>   bo->ttm = NULL;
>>   -    ttm_bo_unreserve(ghost_obj);
>> +    dma_resv_unlock(_obj->base._resv);

fbo->base.base.resv?

-David

>>   ttm_bo_put(ghost_obj);
>>   }
>>   @@ -767,7 +769,7 @@ int ttm_bo_pipeline_move(struct 
>> ttm_buffer_object *bo,
>>   if (ret)
>>   return ret;
>>   -    dma_resv_add_excl_fence(ghost_obj->base.resv, fence);
>> +    dma_resv_add_excl_fence(_obj->base._resv, fence);
>>     /**
>>    * If we're not moving to fixed memory, the TTM object
>> @@ -780,7 +782,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object 
>> *bo,
>>   else
>>   bo->ttm = NULL;
>>   -    ttm_bo_unreserve(ghost_obj);
>> +    dma_resv_unlock(_obj->base._resv);
>>   ttm_bo_put(ghost_obj);
>>     } else if (from->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> @@ -836,7 +838,7 @@ int ttm_bo_pipeline_gutting(struct 
>> ttm_buffer_object *bo)
>>   if (ret)
>>   return ret;
>>   -    ret = dma_resv_copy_fences(ghost->base.resv, bo->base.resv);
>> +    ret = dma_resv_copy_fences(>base._resv, bo->base.resv);
>>   /* Last resort, wait for the BO to be idle when we are OOM */
>>   if (ret)
>>   ttm_bo_wait(bo, false, false);
>> @@ -845,7 +847,7 @@ int ttm_bo_pipeline_gutting(struct 
>> ttm_buffer_object *bo)
>>   bo->mem.mem_type = TTM_PL_SYSTEM;
>>   bo->ttm = NULL;
>>   -    ttm_bo_unreserve(ghost);
>> +    dma_resv_unlock(>base._resv);
>>   ttm_bo_put(ghost);
>>     return 0;
>
___
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Re: [PATCH] drm/ttm: use the parent resv for ghost objects v2

2019-10-24 Thread Christian König

Ping?

Am 18.10.19 um 13:58 schrieb Christian König:

This way the TTM is destroyed with the correct dma_resv object
locked and we can even pipeline imported BO evictions.

v2: Limit this to only cases when the parent object uses a separate
 reservation object as well. This fixes another OOM problem.

Signed-off-by: Christian König 
---
  drivers/gpu/drm/ttm/ttm_bo_util.c | 16 +---
  1 file changed, 9 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c 
b/drivers/gpu/drm/ttm/ttm_bo_util.c
index e030c27f53cf..45e440f80b7b 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -512,7 +512,9 @@ static int ttm_buffer_object_transfer(struct 
ttm_buffer_object *bo,
kref_init(>base.kref);
fbo->base.destroy = _transfered_destroy;
fbo->base.acc_size = 0;
-   fbo->base.base.resv = >base.base._resv;
+   if (bo->base.resv == >base._resv)
+   fbo->base.base.resv = >base.base._resv;
+
dma_resv_init(fbo->base.base.resv);
ret = dma_resv_trylock(fbo->base.base.resv);
WARN_ON(!ret);
@@ -711,7 +713,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
if (ret)
return ret;
  
-		dma_resv_add_excl_fence(ghost_obj->base.resv, fence);

+   dma_resv_add_excl_fence(_obj->base._resv, fence);
  
  		/**

 * If we're not moving to fixed memory, the TTM object
@@ -724,7 +726,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
else
bo->ttm = NULL;
  
-		ttm_bo_unreserve(ghost_obj);

+   dma_resv_unlock(_obj->base._resv);
ttm_bo_put(ghost_obj);
}
  
@@ -767,7 +769,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,

if (ret)
return ret;
  
-		dma_resv_add_excl_fence(ghost_obj->base.resv, fence);

+   dma_resv_add_excl_fence(_obj->base._resv, fence);
  
  		/**

 * If we're not moving to fixed memory, the TTM object
@@ -780,7 +782,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
else
bo->ttm = NULL;
  
-		ttm_bo_unreserve(ghost_obj);

+   dma_resv_unlock(_obj->base._resv);
ttm_bo_put(ghost_obj);
  
  	} else if (from->flags & TTM_MEMTYPE_FLAG_FIXED) {

@@ -836,7 +838,7 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo)
if (ret)
return ret;
  
-	ret = dma_resv_copy_fences(ghost->base.resv, bo->base.resv);

+   ret = dma_resv_copy_fences(>base._resv, bo->base.resv);
/* Last resort, wait for the BO to be idle when we are OOM */
if (ret)
ttm_bo_wait(bo, false, false);
@@ -845,7 +847,7 @@ int ttm_bo_pipeline_gutting(struct ttm_buffer_object *bo)
bo->mem.mem_type = TTM_PL_SYSTEM;
bo->ttm = NULL;
  
-	ttm_bo_unreserve(ghost);

+   dma_resv_unlock(>base._resv);
ttm_bo_put(ghost);
  
  	return 0;


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