diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 21 | 
1 files changed, 14 insertions, 7 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 326dae31b675..9acee4a5b2ba 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -92,13 +92,13 @@ struct amdgpu_prt_cb {  static inline void amdgpu_vm_eviction_lock(struct amdgpu_vm *vm)  {  	mutex_lock(&vm->eviction_lock); -	vm->saved_flags = memalloc_nofs_save(); +	vm->saved_flags = memalloc_noreclaim_save();  }  static inline int amdgpu_vm_eviction_trylock(struct amdgpu_vm *vm)  {  	if (mutex_trylock(&vm->eviction_lock)) { -		vm->saved_flags = memalloc_nofs_save(); +		vm->saved_flags = memalloc_noreclaim_save();  		return 1;  	}  	return 0; @@ -106,7 +106,7 @@ static inline int amdgpu_vm_eviction_trylock(struct amdgpu_vm *vm)  static inline void amdgpu_vm_eviction_unlock(struct amdgpu_vm *vm)  { -	memalloc_nofs_restore(vm->saved_flags); +	memalloc_noreclaim_restore(vm->saved_flags);  	mutex_unlock(&vm->eviction_lock);  } @@ -638,15 +638,15 @@ void amdgpu_vm_move_to_lru_tail(struct amdgpu_device *adev,  	struct amdgpu_vm_bo_base *bo_base;  	if (vm->bulk_moveable) { -		spin_lock(&ttm_bo_glob.lru_lock); +		spin_lock(&adev->mman.bdev.lru_lock);  		ttm_bo_bulk_move_lru_tail(&vm->lru_bulk_move); -		spin_unlock(&ttm_bo_glob.lru_lock); +		spin_unlock(&adev->mman.bdev.lru_lock);  		return;  	}  	memset(&vm->lru_bulk_move, 0, sizeof(vm->lru_bulk_move)); -	spin_lock(&ttm_bo_glob.lru_lock); +	spin_lock(&adev->mman.bdev.lru_lock);  	list_for_each_entry(bo_base, &vm->idle, vm_status) {  		struct amdgpu_bo *bo = bo_base->bo; @@ -660,7 +660,7 @@ void amdgpu_vm_move_to_lru_tail(struct amdgpu_device *adev,  						&bo->shadow->tbo.mem,  						&vm->lru_bulk_move);  	} -	spin_unlock(&ttm_bo_glob.lru_lock); +	spin_unlock(&adev->mman.bdev.lru_lock);  	vm->bulk_moveable = true;  } @@ -869,6 +869,7 @@ static void amdgpu_vm_bo_param(struct amdgpu_device *adev, struct amdgpu_vm *vm,  	bp->domain = amdgpu_bo_get_preferred_pin_domain(adev, bp->domain);  	bp->flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |  		AMDGPU_GEM_CREATE_CPU_GTT_USWC; +	bp->bo_ptr_size = sizeof(struct amdgpu_bo);  	if (vm->use_cpu_for_update)  		bp->flags |= AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;  	else if (!vm->root.base.bo || vm->root.base.bo->shadow) @@ -3147,6 +3148,12 @@ void amdgpu_vm_manager_init(struct amdgpu_device *adev)  {  	unsigned i; +	/* Concurrent flushes are only possible starting with Vega10 and +	 * are broken on Navi10 and Navi14. +	 */ +	adev->vm_manager.concurrent_flush = !(adev->asic_type < CHIP_VEGA10 || +					      adev->asic_type == CHIP_NAVI10 || +					      adev->asic_type == CHIP_NAVI14);  	amdgpu_vmid_mgr_init(adev);  	adev->vm_manager.fence_context = | 
