diff options
| author | Dave Airlie <[email protected]> | 2021-08-11 14:15:26 +1000 | 
|---|---|---|
| committer | Dave Airlie <[email protected]> | 2021-08-11 14:15:27 +1000 | 
| commit | 59b9d6baa1bea254d31042c42bcb8f946c263bae (patch) | |
| tree | b34cc41d9504ff1823e7d534e7ed833c16b55dd2 /drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | |
| parent | 9efba20291f2e816e9c043875bf4e1f0f1416c63 (diff) | |
| parent | a43e2a0e11491b73e2acaa27ee74d6c3b86deac0 (diff) | |
Merge tag 'amd-drm-next-5.15-2021-08-06' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
amd-drm-next-5.15-2021-08-06:
amdgpu:
- Aldebaran fixes
- Powergating fix for Renoir
- Switch virtual DCE over to vkms based atomic modesetting
- Misc typo fixes
- PSP handling cleanups
- DC FP cleanups
- RAS fixes
- Wave debug improvements
- Freesync fix
- BACO/BOCO fixes
- Misc fixes
amdkfd:
- Expose gfx version in sysfs
- Aldebaran fixes
radeon:
- Coding style fix
- Typo fixes
- Pageflip fix
UAPI:
- amdkfd: SVM address range query
  Proposed userspace: https://github.com/RadeonOpenCompute/ROCR-Runtime/tree/memory_model_queries
Signed-off-by: Dave Airlie <[email protected]>
From: Alex Deucher <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c | 25 | 
1 files changed, 17 insertions, 8 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c index c4b3eeeab0a1..2d6b2d77b738 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gpuvm.c @@ -1057,7 +1057,8 @@ static void unmap_bo_from_gpuvm(struct kgd_mem *mem,  static int update_gpuvm_pte(struct kgd_mem *mem,  			    struct kfd_mem_attachment *entry, -			    struct amdgpu_sync *sync) +			    struct amdgpu_sync *sync, +			    bool *table_freed)  {  	struct amdgpu_bo_va *bo_va = entry->bo_va;  	struct amdgpu_device *adev = entry->adev; @@ -1068,7 +1069,7 @@ static int update_gpuvm_pte(struct kgd_mem *mem,  		return ret;  	/* Update the page tables  */ -	ret = amdgpu_vm_bo_update(adev, bo_va, false); +	ret = amdgpu_vm_bo_update(adev, bo_va, false, table_freed);  	if (ret) {  		pr_err("amdgpu_vm_bo_update failed\n");  		return ret; @@ -1080,7 +1081,8 @@ static int update_gpuvm_pte(struct kgd_mem *mem,  static int map_bo_to_gpuvm(struct kgd_mem *mem,  			   struct kfd_mem_attachment *entry,  			   struct amdgpu_sync *sync, -			   bool no_update_pte) +			   bool no_update_pte, +			   bool *table_freed)  {  	int ret; @@ -1097,7 +1099,7 @@ static int map_bo_to_gpuvm(struct kgd_mem *mem,  	if (no_update_pte)  		return 0; -	ret = update_gpuvm_pte(mem, entry, sync); +	ret = update_gpuvm_pte(mem, entry, sync, table_freed);  	if (ret) {  		pr_err("update_gpuvm_pte() failed\n");  		goto update_gpuvm_pte_failed; @@ -1605,7 +1607,8 @@ int amdgpu_amdkfd_gpuvm_free_memory_of_gpu(  }  int amdgpu_amdkfd_gpuvm_map_memory_to_gpu( -		struct kgd_dev *kgd, struct kgd_mem *mem, void *drm_priv) +		struct kgd_dev *kgd, struct kgd_mem *mem, +		void *drm_priv, bool *table_freed)  {  	struct amdgpu_device *adev = get_amdgpu_device(kgd);  	struct amdgpu_vm *avm = drm_priv_to_vm(drm_priv); @@ -1693,7 +1696,7 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(  			 entry->va, entry->va + bo_size, entry);  		ret = map_bo_to_gpuvm(mem, entry, ctx.sync, -				      is_invalid_userptr); +				      is_invalid_userptr, table_freed);  		if (ret) {  			pr_err("Failed to map bo to gpuvm\n");  			goto out_unreserve; @@ -1717,6 +1720,12 @@ int amdgpu_amdkfd_gpuvm_map_memory_to_gpu(  				true);  	ret = unreserve_bo_and_vms(&ctx, false, false); +	/* Only apply no TLB flush on Aldebaran to +	 * workaround regressions on other Asics. +	 */ +	if (table_freed && (adev->asic_type != CHIP_ALDEBARAN)) +		*table_freed = true; +  	goto out;  out_unreserve: @@ -2143,7 +2152,7 @@ static int validate_invalid_user_pages(struct amdkfd_process_info *process_info)  				continue;  			kfd_mem_dmaunmap_attachment(mem, attachment); -			ret = update_gpuvm_pte(mem, attachment, &sync); +			ret = update_gpuvm_pte(mem, attachment, &sync, NULL);  			if (ret) {  				pr_err("%s: update PTE failed\n", __func__);  				/* make sure this gets validated again */ @@ -2349,7 +2358,7 @@ int amdgpu_amdkfd_gpuvm_restore_process_bos(void *info, struct dma_fence **ef)  				continue;  			kfd_mem_dmaunmap_attachment(mem, attachment); -			ret = update_gpuvm_pte(mem, attachment, &sync_obj); +			ret = update_gpuvm_pte(mem, attachment, &sync_obj, NULL);  			if (ret) {  				pr_debug("Memory eviction: update PTE failed. Try again\n");  				goto validate_map_fail; |