From: Yunxiang Li Date: Fri, 24 May 2024 21:11:30 +0000 (-0400) Subject: drm/amdgpu: add lock in amdgpu_gart_invalidate_tlb X-Git-Tag: v6.11-rc1~141^2~18^2~152 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=18f2525d31401e5142db95ff3a6ec0f4147be818;p=thirdparty%2Fkernel%2Flinux.git drm/amdgpu: add lock in amdgpu_gart_invalidate_tlb We need to take the reset domain lock before flush hdp. We can't put the lock inside amdgpu_device_flush_hdp itself because it is used during reset where we already take the write side lock. Signed-off-by: Yunxiang Li Reviewed-by: Christian König Signed-off-by: Alex Deucher --- diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c index eb172388d99ee..256b95232de54 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gart.c @@ -34,6 +34,7 @@ #include #endif #include "amdgpu.h" +#include "amdgpu_reset.h" #include #include @@ -405,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); }