diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_object.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 10 | 
1 files changed, 4 insertions, 6 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index 2bd1a54ee866..3b225be89cb7 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c @@ -79,9 +79,10 @@ static void amdgpu_bo_user_destroy(struct ttm_buffer_object *tbo)  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 *shadow_bo = ttm_to_amdgpu_bo(tbo), *bo;  	struct amdgpu_bo_vm *vmbo; +	bo = shadow_bo->parent;  	vmbo = to_amdgpu_bo_vm(bo);  	/* in case amdgpu_device_recover_vram got NULL of bo->parent */  	if (!list_empty(&vmbo->shadow_list)) { @@ -694,11 +695,6 @@ 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); -	/* Set destroy callback to amdgpu_bo_vm_destroy after vmbo->shadow_list -	 * is initialized. -	 */ -	bo_ptr->tbo.destroy = &amdgpu_bo_vm_destroy;  	return r;  } @@ -715,6 +711,8 @@ void amdgpu_bo_add_to_shadow_list(struct amdgpu_bo_vm *vmbo)  	mutex_lock(&adev->shadow_list_lock);  	list_add_tail(&vmbo->shadow_list, &adev->shadow_list); +	vmbo->shadow->parent = amdgpu_bo_ref(&vmbo->bo); +	vmbo->shadow->tbo.destroy = &amdgpu_bo_vm_destroy;  	mutex_unlock(&adev->shadow_list_lock);  }  | 
