[PATCH] drm/ttm: use the parent resv for ghost objects v2
Christian König
ckoenig.leichtzumerken at gmail.com
Thu Oct 24 10:53:46 UTC 2019
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 <christian.koenig at amd.com>
>>> ---
>>> 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(&fbo->base.kref);
>>> fbo->base.destroy = &ttm_transfered_destroy;
>>> fbo->base.acc_size = 0;
>>> - fbo->base.base.resv = &fbo->base.base._resv;
>>> + if (bo->base.resv == &bo->base._resv)
>>> + fbo->base.base.resv = &fbo->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(&ghost_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(&ghost_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(&ghost_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(&ghost_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(&ghost->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(&ghost->base._resv);
>>> ttm_bo_put(ghost);
>>> return 0;
More information about the amd-gfx
mailing list