[PATCH 2/2] drm/amdgpu: move shadow_list to amdgpu_bo_vm

Das, Nirmoy nirmoy.das at amd.com
Tue Jun 15 11:59:13 UTC 2021


On 6/15/2021 1:57 PM, Christian König wrote:
>
>
> Am 15.06.21 um 13:51 schrieb Nirmoy Das:
>> Move shadow_list to struct amdgpu_bo_vm as shadow BOs
>> are part of PT/PD BOs.
>>
>> Signed-off-by: Nirmoy Das <nirmoy.das at amd.com>
>> ---
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_device.c |  5 +++--
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 14 ++++++++------
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_object.h |  6 ++----
>>   drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c     |  2 +-
>>   4 files changed, 14 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> index f2636f411a25..3f51b142fc83 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> @@ -4063,6 +4063,7 @@ static int amdgpu_device_recover_vram(struct 
>> amdgpu_device *adev)
>>   {
>>       struct dma_fence *fence = NULL, *next = NULL;
>>       struct amdgpu_bo *shadow;
>> +    struct amdgpu_bo_vm *vmbo;
>>       long r = 1, tmo;
>>         if (amdgpu_sriov_runtime(adev))
>> @@ -4072,8 +4073,8 @@ static int amdgpu_device_recover_vram(struct 
>> amdgpu_device *adev)
>>         dev_info(adev->dev, "recover vram bo from shadow start\n");
>>       mutex_lock(&adev->shadow_list_lock);
>> -    list_for_each_entry(shadow, &adev->shadow_list, shadow_list) {
>> -
>> +    list_for_each_entry(vmbo, &adev->shadow_list, shadow_list) {
>> +        shadow = &vmbo->bo;
>>           /* No need to recover an evicted BO */
>>           if (shadow->tbo.mem.mem_type != TTM_PL_TT ||
>>               shadow->tbo.mem.start == AMDGPU_BO_INVALID_OFFSET ||
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> index ea54fd739c41..ea339eaac399 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
>> @@ -103,11 +103,13 @@ static void amdgpu_bo_vm_destroy(struct 
>> ttm_buffer_object *tbo)
>>   {
>>       struct amdgpu_device *adev = amdgpu_ttm_adev(tbo->bdev);
>>       struct amdgpu_bo *bo = ttm_to_amdgpu_bo(tbo);
>> +    struct amdgpu_bo_vm *vmbo;
>>   +    vmbo = to_amdgpu_bo_vm(bo);
>>       /* in case amdgpu_device_recover_vram got NULL of bo->parent */
>> -    if (!list_empty(&bo->shadow_list)) {
>> +    if (!list_empty(&vmbo->shadow_list)) {
>>           mutex_lock(&adev->shadow_list_lock);
>> -        list_del_init(&bo->shadow_list);
>> +        list_del_init(&vmbo->shadow_list);
>>           mutex_unlock(&adev->shadow_list_lock);
>>       }
>>   @@ -583,7 +585,6 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
>>       if (bo == NULL)
>>           return -ENOMEM;
>>       drm_gem_private_object_init(adev_to_drm(adev), &bo->tbo.base, 
>> size);
>> -    INIT_LIST_HEAD(&bo->shadow_list);
>>       bo->vm_bo = NULL;
>>       bo->preferred_domains = bp->preferred_domain ? 
>> bp->preferred_domain :
>>           bp->domain;
>> @@ -713,6 +714,7 @@ int amdgpu_bo_create_vm(struct amdgpu_device *adev,
>>           return r;
>>         *vmbo_ptr = to_amdgpu_bo_vm(bo_ptr);
>> +    INIT_LIST_HEAD(&(*vmbo_ptr)->shadow_list);
>>       return r;
>>   }
>>   @@ -757,12 +759,12 @@ int amdgpu_bo_validate(struct amdgpu_bo *bo)
>>    *
>>    * Insert a BO to the shadow list.
>>    */
>> -void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo *bo)
>> +void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo_vm *vmbo)
>>   {
>> -    struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
>> +    struct amdgpu_device *adev = amdgpu_ttm_adev(vmbo->bo.tbo.bdev);
>>         mutex_lock(&adev->shadow_list_lock);
>> -    list_add_tail(&bo->shadow_list, &adev->shadow_list);
>> +    list_add_tail(&vmbo->shadow_list, &adev->shadow_list);
>>       mutex_unlock(&adev->shadow_list_lock);
>>   }
>>   diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
>> index a8c702634e1b..18cb2f28e4de 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.h
>> @@ -109,9 +109,6 @@ struct amdgpu_bo {
>>   #ifdef CONFIG_MMU_NOTIFIER
>>       struct mmu_interval_notifier    notifier;
>>   #endif
>> -
>> -    struct list_head        shadow_list;
>> -
>>       struct kgd_mem                  *kfd_bo;
>>   };
>>   @@ -127,6 +124,7 @@ struct amdgpu_bo_user {
>>   struct amdgpu_bo_vm {
>>       struct amdgpu_bo        bo;
>>       struct amdgpu_bo        *shadow;
>> +    struct list_head        shadow_list;
>>       struct amdgpu_vm_bo_base        entries[];
>>   };
>>   @@ -333,7 +331,7 @@ u64 amdgpu_bo_gpu_offset_no_check(struct 
>> amdgpu_bo *bo);
>>   int amdgpu_bo_validate(struct amdgpu_bo *bo);
>>   void amdgpu_bo_get_memory(struct amdgpu_bo *bo, uint64_t *vram_mem,
>>                   uint64_t *gtt_mem, uint64_t *cpu_mem);
>> -void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo *bo);
>> +void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo_vm *vmbo);
>>   int amdgpu_bo_restore_shadow(struct amdgpu_bo *shadow,
>>                    struct dma_fence **fence);
>>   uint32_t amdgpu_bo_get_preferred_pin_domain(struct amdgpu_device 
>> *adev,
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c 
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> index 4c4c56581780..812c225538a7 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c
>> @@ -936,7 +936,7 @@ static int amdgpu_vm_pt_create(struct 
>> amdgpu_device *adev,
>>       }
>>         (*vmbo)->shadow->parent = amdgpu_bo_ref(bo);
>> -    amdgpu_bo_add_to_shadow_list((*vmbo)->shadow);
>> +    amdgpu_bo_add_to_shadow_list((*vmbo));
>
> You can drop the extra () pair here.
>
> Apart from that the series is Reviewed-by: Christian König 
> <christian.koenig at amd.com>


Thanks, Christian. I will drop those braces and submit.


Nirmoy

>
> Thanks,
> Christian.
>
>>         return 0;
>>   }
>


More information about the amd-gfx mailing list