[PATCH] drm/amdgpu: Fix the vram base start address

Arunpravin Paneer Selvam arunpravin.paneerselvam at amd.com
Wed Nov 1 19:13:36 UTC 2023


Hi Christian,

On 10/30/2023 9:34 PM, Christian König wrote:
>
>
> Am 30.10.23 um 13:22 schrieb Arunpravin Paneer Selvam:
>> If the size returned by drm buddy allocator is higher than
>> the required size, we take the higher size to calculate
>> the buffer start address. This is required if we couldn't
>> trim the buffer to the requested size. This will fix the
>> display corruption issue on APU's which has limited VRAM
>> size.
>>
>> gitlab issue link: https://gitlab.freedesktop.org/drm/amd/-/issues/2859
>> JIRA ticket link: https://ontrack-internal.amd.com/browse/SWDEV-425461
>>
>> Fixes: 0a1844bf0b53 ("drm/buddy: Improve contiguous memory allocation")
>> Signed-off-by: Arunpravin Paneer Selvam 
>> <Arunpravin.PaneerSelvam at amd.com>
>
> Acked-by: Christian König <christian.koenig at amd.com>
>
> IIRC that hack with the start address is actually not needed any more, 
> but we need to double check this.
okay, can we just remove this hack and keep the vres->base.start value 
as the start address of the first block from the
allocated list.

Thanks,
Arun
>
> Christian.
>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 15 +++++++++++++--
>>   1 file changed, 13 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
>> index 18f58efc9dc7..08916538a615 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
>> @@ -77,7 +77,16 @@ static inline bool 
>> amdgpu_is_vram_mgr_blocks_contiguous(struct list_head *head)
>>       return true;
>>   }
>>   +static inline u64 amdgpu_vram_mgr_blocks_size(struct list_head *head)
>> +{
>> +    struct drm_buddy_block *block;
>> +    u64 size = 0;
>>   +    list_for_each_entry(block, head, link)
>> +        size += amdgpu_vram_mgr_block_size(block);
>> +
>> +    return size;
>> +}
>>     /**
>>    * DOC: mem_info_vram_total
>> @@ -516,6 +525,8 @@ static int amdgpu_vram_mgr_new(struct 
>> ttm_resource_manager *man,
>>       mutex_unlock(&mgr->lock);
>>         vres->base.start = 0;
>> +    size = max_t(u64, amdgpu_vram_mgr_blocks_size(&vres->blocks),
>> +             vres->base.size);
>>       list_for_each_entry(block, &vres->blocks, link) {
>>           unsigned long start;
>>   @@ -523,8 +534,8 @@ static int amdgpu_vram_mgr_new(struct 
>> ttm_resource_manager *man,
>>               amdgpu_vram_mgr_block_size(block);
>>           start >>= PAGE_SHIFT;
>>   -        if (start > PFN_UP(vres->base.size))
>> -            start -= PFN_UP(vres->base.size);
>> +        if (start > PFN_UP(size))
>> +            start -= PFN_UP(size);
>>           else
>>               start = 0;
>>           vres->base.start = max(vres->base.start, start);
>



More information about the amd-gfx mailing list