[PATCH 01/12] drm/amdgpu: Use memset32 for IB padding

Tvrtko Ursulin tvrtko.ursulin at igalia.com
Fri Jan 3 14:40:20 UTC 2025


On 02/01/2025 13:45, Christian König wrote:
> 
> 
> Am 27.12.24 um 12:19 schrieb Tvrtko Ursulin:
>> From: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>
>>
>> Use memset32 instead of open coding it, just because it is
>> that bit nicer.
> 
> In general looks mostly good, my only concern is that we already had to 
> switch to memset_io() on some platforms for clearing buffers.
> 
> Now an IB should in theory always be in system memory, but it would be 
> nice to handle that cleanly.

I could only find kmap on the sub-allocation path which leads into IB. 
What am I missing?

Or if one day IO mapped objects will be added as backing store for SA 
then I think it shouldn't be too difficult to somehow propagate that 
fact up. Maybe all the way to struct amdgpu_ib which would then be able 
to decide here which flavour of memset to use.

Regards,

Tvrtko
>>
>> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at igalia.com>
>> Cc: Christian König <christian.koenig at amd.com>
>> Cc: Sunil Khatri <sunil.khatri at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c | 12 ++++++++++--
>>   1 file changed, 10 insertions(+), 2 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
>> index a6e28fe3f8d6..a27e32f48f99 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ring.c
>> @@ -136,8 +136,16 @@ void amdgpu_ring_insert_nop(struct amdgpu_ring 
>> *ring, uint32_t count)
>>    */
>>   void amdgpu_ring_generic_pad_ib(struct amdgpu_ring *ring, struct 
>> amdgpu_ib *ib)
>>   {
>> -    while (ib->length_dw & ring->funcs->align_mask)
>> -        ib->ptr[ib->length_dw++] = ring->funcs->nop;
>> +    u32 align_mask = ring->funcs->align_mask;
>> +    u32 count = ib->length_dw & align_mask;
>> +
>> +    if (count) {
>> +        count = align_mask + 1 - count;
>> +
>> +        memset32(&ib->ptr[ib->length_dw], ring->funcs->nop, count);
>> +
>> +        ib->length_dw += count;
>> +    }
>>   }
>>   /**
> 


More information about the amd-gfx mailing list