diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 29 | 
1 files changed, 13 insertions, 16 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index b9441ab457ea..3c0310576b3b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c @@ -483,7 +483,7 @@ bool amdgpu_vm_need_pipeline_sync(struct amdgpu_ring *ring,  				  struct amdgpu_job *job)  {  	struct amdgpu_device *adev = ring->adev; -	unsigned vmhub = ring->funcs->vmhub; +	unsigned vmhub = ring->vm_hub;  	struct amdgpu_vmid_mgr *id_mgr = &adev->vm_manager.id_mgr[vmhub];  	if (job->vmid == 0) @@ -517,7 +517,7 @@ int amdgpu_vm_flush(struct amdgpu_ring *ring, struct amdgpu_job *job,  		    bool need_pipe_sync)  {  	struct amdgpu_device *adev = ring->adev; -	unsigned vmhub = ring->funcs->vmhub; +	unsigned vmhub = ring->vm_hub;  	struct amdgpu_vmid_mgr *id_mgr = &adev->vm_manager.id_mgr[vmhub];  	struct amdgpu_vmid *id = &id_mgr->ids[job->vmid];  	bool spm_update_needed = job->spm_update_needed; @@ -867,6 +867,8 @@ int amdgpu_vm_update_range(struct amdgpu_device *adev, struct amdgpu_vm *vm,  					    pages_addr[idx - 1] + PAGE_SIZE))  						break;  				} +				if (!contiguous) +					count--;  				num_entries = count *  					AMDGPU_GPU_PAGES_IN_CPU_PAGE;  			} @@ -918,8 +920,8 @@ error_unlock:  	return r;  } -void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem, -				uint64_t *gtt_mem, uint64_t *cpu_mem) +void amdgpu_vm_get_memory(struct amdgpu_vm *vm, +			  struct amdgpu_mem_stats *stats)  {  	struct amdgpu_bo_va *bo_va, *tmp; @@ -927,41 +929,36 @@ void amdgpu_vm_get_memory(struct amdgpu_vm *vm, uint64_t *vram_mem,  	list_for_each_entry_safe(bo_va, tmp, &vm->idle, base.vm_status) {  		if (!bo_va->base.bo)  			continue; -		amdgpu_bo_get_memory(bo_va->base.bo, vram_mem, -				gtt_mem, cpu_mem); +		amdgpu_bo_get_memory(bo_va->base.bo, stats);  	}  	list_for_each_entry_safe(bo_va, tmp, &vm->evicted, base.vm_status) {  		if (!bo_va->base.bo)  			continue; -		amdgpu_bo_get_memory(bo_va->base.bo, vram_mem, -				gtt_mem, cpu_mem); +		amdgpu_bo_get_memory(bo_va->base.bo, stats);  	}  	list_for_each_entry_safe(bo_va, tmp, &vm->relocated, base.vm_status) {  		if (!bo_va->base.bo)  			continue; -		amdgpu_bo_get_memory(bo_va->base.bo, vram_mem, -				gtt_mem, cpu_mem); +		amdgpu_bo_get_memory(bo_va->base.bo, stats);  	}  	list_for_each_entry_safe(bo_va, tmp, &vm->moved, base.vm_status) {  		if (!bo_va->base.bo)  			continue; -		amdgpu_bo_get_memory(bo_va->base.bo, vram_mem, -				gtt_mem, cpu_mem); +		amdgpu_bo_get_memory(bo_va->base.bo, stats);  	}  	list_for_each_entry_safe(bo_va, tmp, &vm->invalidated, base.vm_status) {  		if (!bo_va->base.bo)  			continue; -		amdgpu_bo_get_memory(bo_va->base.bo, vram_mem, -				gtt_mem, cpu_mem); +		amdgpu_bo_get_memory(bo_va->base.bo, stats);  	}  	list_for_each_entry_safe(bo_va, tmp, &vm->done, base.vm_status) {  		if (!bo_va->base.bo)  			continue; -		amdgpu_bo_get_memory(bo_va->base.bo, vram_mem, -				gtt_mem, cpu_mem); +		amdgpu_bo_get_memory(bo_va->base.bo, stats);  	}  	spin_unlock(&vm->status_lock);  } +  /**   * amdgpu_vm_bo_update - update all BO mappings in the vm page table   * | 
