[PATCH 2/2] drm/amdgpu: allow GTT overcommit during bind

Chunming Zhou zhoucm1 at amd.com
Tue Oct 17 04:11:25 UTC 2017



On 2017年10月16日 19:40, Christian König wrote:
> Am 16.10.2017 um 11:42 schrieb Chunming Zhou:
>>
>>
>> On 2017年10月16日 17:26, Christian König wrote:
>>> From: Christian König <christian.koenig at amd.com>
>>>
>>> While binding BOs to GART we need to allow a bit overcommit in the GTT
>>> domain.
>> If allowing overcommit, will the new node not over the GART mc range? 
>> Which is also allowed?
> No that is checked separately by drm_mm_insert_node_in_range().
>
> This is just to cover the case when we have a BO in GTT space which 
> needs to be bound into the GART table.
Sorry, I missed that even gart BO is also without node during creating.
One nitpick, atomic64_sub(mem->num_pages, &mgr->available) will be 
calculated twice for one gart bo create and pin, which results in 
available isn't correct.

Regards,
David Zhou
>
> Regards,
> Christian.
>
>>
>> Regards,
>> David Zhou
>>>   Otherwise we can never use the full GART space when GART size=GTT 
>>> size.
>>>
>>> Signed-off-by: Christian König <christian.koenig at amd.com>
>>> ---
>>>   drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c | 8 +++++---
>>>   1 file changed, 5 insertions(+), 3 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c 
>>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>>> index 0d15eb7d31d7..33535d347734 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c
>>> @@ -169,7 +169,8 @@ static int amdgpu_gtt_mgr_new(struct 
>>> ttm_mem_type_manager *man,
>>>       int r;
>>>         spin_lock(&mgr->lock);
>>> -    if (atomic64_read(&mgr->available) < mem->num_pages) {
>>> +    if ((&tbo->mem == mem || tbo->mem.mem_type != TTM_PL_TT) &&
>>> +        atomic64_read(&mgr->available) < mem->num_pages) {
>>>           spin_unlock(&mgr->lock);
>>>           return 0;
>>>       }
>>> @@ -244,8 +245,9 @@ static void amdgpu_gtt_mgr_del(struct 
>>> ttm_mem_type_manager *man,
>>>   uint64_t amdgpu_gtt_mgr_usage(struct ttm_mem_type_manager *man)
>>>   {
>>>       struct amdgpu_gtt_mgr *mgr = man->priv;
>>> +    s64 result = man->size - atomic64_read(&mgr->available);
>>>   -    return (u64)(man->size - atomic64_read(&mgr->available)) * 
>>> PAGE_SIZE;
>>> +    return (result > 0 ? result : 0) * PAGE_SIZE;
>>>   }
>>>     /**
>>> @@ -265,7 +267,7 @@ static void amdgpu_gtt_mgr_debug(struct 
>>> ttm_mem_type_manager *man,
>>>       drm_mm_print(&mgr->mm, printer);
>>>       spin_unlock(&mgr->lock);
>>>   -    drm_printf(printer, "man size:%llu pages, gtt available:%llu 
>>> pages, usage:%lluMB\n",
>>> +    drm_printf(printer, "man size:%llu pages, gtt available:%lld 
>>> pages, usage:%lluMB\n",
>>>              man->size, (u64)atomic64_read(&mgr->available),
>>>              amdgpu_gtt_mgr_usage(man) >> 20);
>>>   }
>>
>



More information about the amd-gfx mailing list