diff --git a/sys/dev/drm/amd/amdgpu/amdgpu_sa.c b/sys/dev/drm/amd/amdgpu/amdgpu_sa.c --- a/sys/dev/drm/amd/amdgpu/amdgpu_sa.c +++ b/sys/dev/drm/amd/amdgpu/amdgpu_sa.c @@ -79,8 +79,10 @@ { struct amdgpu_sa_bo *sa_bo, *tmp; + lockmgr(&sa_manager->wq.lock, LK_EXCLUSIVE); if (sa_manager->bo == NULL) { dev_err(adev->dev, "no bo for sa manager\n"); + lockmgr(&sa_manager->wq.lock, LK_RELEASE); return; } @@ -97,6 +99,7 @@ amdgpu_bo_free_kernel(&sa_manager->bo, (u64 *)&sa_manager->gpu_addr, &sa_manager->cpu_ptr); sa_manager->size = 0; + lockmgr(&sa_manager->wq.lock, LK_RELEASE); } static void amdgpu_sa_bo_remove_locked(struct amdgpu_sa_bo *sa_bo)