[PATCH] drm/amdgpu: Refactor code to handle non coherent and uncached

Bhardwaj, Rajneesh rajneesh.bhardwaj at amd.com
Wed Jul 20 23:24:22 UTC 2022


On 7/20/2022 7:18 PM, Felix Kuehling wrote:
>
> On 2022-07-18 18:52, Rajneesh Bhardwaj wrote:
>> This simplifies existing coherence handling for Arcturus and Aldabaran
>> to account for !coherent && uncached scenarios.
>>
>> Cc: Joseph Greathouse <joseph.greathouse at amd.com>
>> Cc: Alex Deucher <Alexander.Deucher at amd.com>
>> Signed-off-by: Rajneesh Bhardwaj <rajneesh.bhardwaj at amd.com>
>> ---
>>   .../gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c  | 53 +++++++++----------
>>   1 file changed, 26 insertions(+), 27 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> index d1657de5f875..0fdfd79f69ad 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c
>> @@ -471,45 +471,44 @@ static uint64_t get_pte_flags(struct 
>> amdgpu_device *adev, struct kgd_mem *mem)
>>         switch (adev->asic_type) {
>>       case CHIP_ARCTURUS:
>> -        if (mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) {
>> -            if (bo_adev == adev)
>> -                mapping_flags |= coherent ?
>> -                    AMDGPU_VM_MTYPE_CC : AMDGPU_VM_MTYPE_RW;
>> -            else
>> -                mapping_flags |= coherent ?
>> -                    AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC;
>> -        } else {
>> -            mapping_flags |= coherent ?
>> -                AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC;
>> -        }
>> -        break;
>>       case CHIP_ALDEBARAN:
>> -        if (coherent && uncached) {
>> -            if (adev->gmc.xgmi.connected_to_cpu ||
>> -                !(mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM))
>> -                snoop = true;
>> -            mapping_flags |= AMDGPU_VM_MTYPE_UC;
>> -        } else if (mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) {
>> +        if (mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM) {
>>               if (bo_adev == adev) {
>> -                mapping_flags |= coherent ?
>> -                    AMDGPU_VM_MTYPE_CC : AMDGPU_VM_MTYPE_RW;
>> -                if (adev->gmc.xgmi.connected_to_cpu)
>> +                if (uncached)
>> +                    mapping_flags |= AMDGPU_VM_MTYPE_UC;
>> +                else if (coherent)
>> +                    mapping_flags |= AMDGPU_VM_MTYPE_CC;
>> +                else
>> +                    mapping_flags |= AMDGPU_VM_MTYPE_RW;
>> +                if (adev->asic_type == CHIP_ALDEBARAN &&
>> +                    adev->gmc.xgmi.connected_to_cpu)
>>                       snoop = true;
>>               } else {
>> -                mapping_flags |= coherent ?
>> -                    AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC;
>> +                if (uncached || coherent)
>> +                    mapping_flags |= AMDGPU_VM_MTYPE_UC;
>> +                else
>> +                    mapping_flags |= AMDGPU_VM_MTYPE_NC;
>>                   if (amdgpu_xgmi_same_hive(adev, bo_adev))
>>                       snoop = true;
>>               }
>>           } else {
>> +            if (uncached || coherent)
>> +                mapping_flags |= AMDGPU_VM_MTYPE_UC;
>> +            else
>> +                mapping_flags |= AMDGPU_VM_MTYPE_NC;
>>               snoop = true;
>> -            mapping_flags |= coherent ?
>> -                AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC;
>>           }
>>           break;
>>       default:
>> -        mapping_flags |= coherent ?
>> -            AMDGPU_VM_MTYPE_UC : AMDGPU_VM_MTYPE_NC;
>> +        if (uncached || coherent)
>> +            mapping_flags |= AMDGPU_VM_MTYPE_UC;
>> +        else
>> +            mapping_flags |= AMDGPU_VM_MTYPE_NC;
>> +
>> +        if (!(mem->alloc_flags & KFD_IOC_ALLOC_MEM_FLAGS_VRAM))
>> +            snoop = true;
>> +
>> +
>
> With the two extra blank lines removed, this patch is
>
> Reviewed-by: Felix Kuehling <Felix.Kuehling at amd.com>
>
> Please check whether a similar cleanup can be made in 
> svm_range_get_pte_flags, or maybe even, whether common code can be 
> factored out of those two functions.


Thanks Felix for the review. Do you want me to send V2 with two lines 
removed or just apply to amd-staging-drm-next after deleting those two 
lines?


I will check svm_range_get_pte_flags and see if I can cleanup the code 
there and get back to you.


>
> Regards,
>   Felix
>
>
>>       }
>>         pte_flags = amdgpu_gem_va_map_flags(adev, mapping_flags);


More information about the amd-gfx mailing list