diff options
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c | 11 | 
1 files changed, 6 insertions, 5 deletions
| diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c index c623e23049d1..256b95232de5 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c @@ -34,6 +34,7 @@  #include <asm/set_memory.h>  #endif  #include "amdgpu.h" +#include "amdgpu_reset.h"  #include <drm/drm_drv.h>  #include <drm/ttm/ttm_tt.h> @@ -325,10 +326,7 @@ void amdgpu_gart_unbind(struct amdgpu_device *adev, uint64_t offset,  			page_base += AMDGPU_GPU_PAGE_SIZE;  		}  	} -	mb(); -	amdgpu_device_flush_hdp(adev, NULL); -	for_each_set_bit(i, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS) -		amdgpu_gmc_flush_gpu_tlb(adev, 0, i, 0); +	amdgpu_gart_invalidate_tlb(adev);  	drm_dev_exit(idx);  } @@ -408,7 +406,10 @@ void amdgpu_gart_invalidate_tlb(struct amdgpu_device *adev)  		return;  	mb(); -	amdgpu_device_flush_hdp(adev, NULL); +	if (down_read_trylock(&adev->reset_domain->sem)) { +		amdgpu_device_flush_hdp(adev, NULL); +		up_read(&adev->reset_domain->sem); +	}  	for_each_set_bit(i, adev->vmhubs_mask, AMDGPU_MAX_VMHUBS)  		amdgpu_gmc_flush_gpu_tlb(adev, 0, i, 0);  } |