The bisected commit only uncovers the existing deadlock scenario. Summary of the issue. amdgpu_bo_create -> pb_cache_reclaim_buffer (lock pb_cache::mutex) -> pb_cache_is_buffer_compat -> amdgpu_bo_wait (lock bo_fence_lock) - DEADLOCK pb_reference -> pb_destroy -> amdgpu_bo_destroy_or_cache -> pb_cache_add_buffer (lock::pb_cache::mutex) - DEADLOCK amdgpu_cs_flush (lock bo_fence_lock) -> amdgpu_add_fence_dependency (loop-wait for submission_in_progress) - DEADLOCK It looks the best way to prevent this deadlock is to unify pb_cache::mutex and bo_fence_lock under one lock, that is, one of them has to go.