forked from mirrors/linux
		
	drm/amdgpu: move shadow_list to amdgpu_bo_vm
Move shadow_list to struct amdgpu_bo_vm as shadow BOs are part of PT/PD BOs. Signed-off-by: Nirmoy Das <nirmoy.das@amd.com> Reviewed-by: Christian König <christian.koenig@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
		
							parent
							
								
									23e24fbb76
								
							
						
					
					
						commit
						e18aaea733
					
				
					 4 changed files with 14 additions and 13 deletions
				
			
		| 
						 | 
				
			
			@ -4124,6 +4124,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))
 | 
			
		||||
| 
						 | 
				
			
			@ -4133,8 +4134,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.resource->mem_type != TTM_PL_TT ||
 | 
			
		||||
		    shadow->tbo.resource->start == AMDGPU_BO_INVALID_OFFSET ||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -79,11 +79,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);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -559,7 +561,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;
 | 
			
		||||
| 
						 | 
				
			
			@ -689,6 +690,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;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -733,12 +735,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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -938,7 +938,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);
 | 
			
		||||
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue