All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/amdgpu: New method to check block continuous
@ 2022-11-27  5:39 xinhui pan
  2022-11-28 17:11 ` Christian König
  0 siblings, 1 reply; 4+ messages in thread
From: xinhui pan @ 2022-11-27  5:39 UTC (permalink / raw)
  To: amd-gfx; +Cc: alexander.deucher, xinhui pan, christian.koenig

Blocks are not guarnteed to be in ascending order.

Signed-off-by: xinhui pan <xinhui.pan@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;
 }
 
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] drm/amdgpu: New method to check block continuous
  2022-11-27  5:39 [PATCH] drm/amdgpu: New method to check block continuous xinhui pan
@ 2022-11-28 17:11 ` Christian König
  2022-11-29  2:11   ` 回复: " Pan, Xinhui
  0 siblings, 1 reply; 4+ messages in thread
From: Christian König @ 2022-11-28 17:11 UTC (permalink / raw)
  To: xinhui pan, amd-gfx; +Cc: alexander.deucher

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@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;
>   }
>   
>   


^ permalink raw reply	[flat|nested] 4+ messages in thread

* 回复: [PATCH] drm/amdgpu: New method to check block continuous
  2022-11-28 17:11 ` Christian König
@ 2022-11-29  2:11   ` Pan, Xinhui
  2022-11-29  8:55     ` Christian König
  0 siblings, 1 reply; 4+ messages in thread
From: Pan, Xinhui @ 2022-11-29  2:11 UTC (permalink / raw)
  To: Christian König, amd-gfx; +Cc: Deucher, Alexander

[-- Attachment #1: Type: text/plain, Size: 2519 bytes --]

[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?

thanks
xinhui

________________________________________
发件人: Christian König <ckoenig.leichtzumerken@gmail.com>
发送时间: 2022年11月29日 1:11
收件人: Pan, Xinhui; amd-gfx@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@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;
>   }
>
>


[-- Attachment #2: winmail.dat --]
[-- Type: application/ms-tnef, Size: 16653 bytes --]

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: 回复: [PATCH] drm/amdgpu: New method to check block continuous
  2022-11-29  2:11   ` 回复: " Pan, Xinhui
@ 2022-11-29  8:55     ` Christian König
  0 siblings, 0 replies; 4+ messages in thread
From: Christian König @ 2022-11-29  8:55 UTC (permalink / raw)
  To: Pan, Xinhui, amd-gfx; +Cc: Deucher, Alexander

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@gmail.com>
> 发送时间: 2022年11月29日 1:11
> 收件人: Pan, Xinhui; amd-gfx@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@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;
>>    }
>>
>>


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-11-29  8:55 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-11-27  5:39 [PATCH] drm/amdgpu: New method to check block continuous xinhui pan
2022-11-28 17:11 ` Christian König
2022-11-29  2:11   ` 回复: " Pan, Xinhui
2022-11-29  8:55     ` Christian König

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.