[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