Re: 回复: [PATCH] drm/amdgpu: New method to check block continuous

Christian König ckoenig.leichtzumerken at gmail.com
Tue Nov 29 08:55:24 UTC 2022


Hi Xinhui,

Am 29.11.22 um 03:11 schrieb Pan, Xinhui:
> [AMD Official Use Only - General]
>
> What I am thinking is that
> Hi Chris,
>
> For continuous memory allocation, of course the blocks are in ascending order.
>
> For non-continuous memory allocation, the allocated memory might be continuous while the blocks are not in ascending order.
>
> Anyway, could we just re-sort these blocks in ascending order if memory is indeed continuous?

Well that the blocks are in continuous order by coincident is just 
extremely unlikely.

So this doesn't make much sense.

Regards,
Christian.

>
> thanks
> xinhui
>
> ________________________________________
> 发件人: Christian König <ckoenig.leichtzumerken at gmail.com>
> 发送时间: 2022年11月29日 1:11
> 收件人: Pan, Xinhui; amd-gfx at lists.freedesktop.org
> 抄送: Deucher, Alexander
> 主题: Re: [PATCH] drm/amdgpu: New method to check block continuous
>
> Am 27.11.22 um 06:39 schrieb xinhui pan:
>> Blocks are not guarnteed to be in ascending order.
> Well certainly a NAK. Blocks are required to be in ascending order to be
> contiguous.
>
> Regards,
> Christian.
>
>> Signed-off-by: xinhui pan <xinhui.pan at amd.com>
>> ---
>>    drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 21 ++++++++------------
>>    1 file changed, 8 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
>> index 27159f1d112e..17175d284869 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
>> @@ -59,22 +59,17 @@ amdgpu_vram_mgr_first_block(struct list_head *list)
>>    static inline bool amdgpu_is_vram_mgr_blocks_contiguous(struct list_head *head)
>>    {
>>        struct drm_buddy_block *block;
>> -     u64 start, size;
>> +     u64 start = LONG_MAX, end = 0, size = 0;
>>
>> -     block = amdgpu_vram_mgr_first_block(head);
>> -     if (!block)
>> -             return false;
>> +     list_for_each_entry(block, head, link) {
>> +             u64 bstart = amdgpu_vram_mgr_block_start(block);
>> +             u64 bsize = amdgpu_vram_mgr_block_size(block);
>>
>> -     while (head != block->link.next) {
>> -             start = amdgpu_vram_mgr_block_start(block);
>> -             size = amdgpu_vram_mgr_block_size(block);
>> -
>> -             block = list_entry(block->link.next, struct drm_buddy_block, link);
>> -             if (start + size != amdgpu_vram_mgr_block_start(block))
>> -                     return false;
>> +             start = min(bstart, start);
>> +             end = max(bstart + bsize, end);
>> +             size += bsize;
>>        }
>> -
>> -     return true;
>> +     return end == start + size;
>>    }
>>
>>



More information about the amd-gfx mailing list