[PATCH 00/10] Use drm_exec to lock TTM buffers, respin
From: Natalie Vock
Date: Fri Jul 03 2026 - 12:36:59 EST
Hi all,
this is a respin of Christian's patchset to make TTM use drm_exec for
evicting buffers.
I've been investigating VRAM management for amdgpu quite a bit in recent
times, and under really strong VRAM contention I observed frequent
instabilities/random crashes that I traced back to TTM being unable to
evict buffers properly. The typical failure case was one game squatting
more or less all of VRAM while also being rather spammy with submits.
In that case, trylocking fails because concurrent submits from the game
already hold buffer locks, and since there isn't much else to evict,
allocation just fails.
The original patchset ended up fizzling out in previous attempts to
upstream it, but I think it's worth retrying to upstream this, so I took
over and rebased it on top of current drm-misc-next. Aside from
that, while testing the patchset I found two bugs causing rather random
issues ranging from kernel crashes to random GPU hangs in it, which I fixed
for this respin. The two bugs were:
1. The ttm_buffer_object duplication in ttm_buffer_object_transfer did
not alter the GEM object's driver function pointers, so the
transferred object erroneously inherited the free() function of the
source buffer. When the transferred object was freed, the driver's
free function was invoked and treated the transferred TTM bo as if it
was a driver BO. Hilarity ensued.
2. drm_exec LRU walks were missing handling for already-locked objects.
If the incoming exec object was created without
DRM_EXEC_IGNORE_DUPLICATES, drm_exec_lock_obj would return -EALREADY
and the buffer would be skipped even if ctx->allow_res_evict was set
(funkiness level: moderate).
If the exec did have DRM_EXEC_IGNORE_DUPLICATES
set, the buffer would be processed, and then unlocked, silently
dropping the lock of some random object that the caller expected to
stay locked (funkiness level: off the charts).
With those two bugs fixed, VRAM overcommit works considerably more
stable - there are no random eviction failures and related fallouts at
all anymore.
Signed-off-by: Natalie Vock <natalie.vock@xxxxxx>
---
Christian König (9):
drm/ttm: replace TTMs refcount with the DRM refcount v4
drm/ttm: remove ttm_lru_walk_ops
drm/ttm: grab BO reference before locking it
drm/ttm: switch to ttm_bo_lru_for_each_reserved_guarded for swapout
drm/ttm: move zombie handling into ttm_bo_evict
drm/ttm: use ttm_bo_lru_for_each_reserved_guarded in evict_all
drm/xe: remove workaround for TTM internals
drm/ttm: support using drm_exec during eviction v4
drm/amdgpu: use drm_exec during BO validation
Natalie Vock (1):
drm/exec: Add helper to bypass IGNORE_DUPLICATES flag
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 80 +++----
drivers/gpu/drm/drm_exec.c | 52 +++--
drivers/gpu/drm/i915/gem/i915_gem_ttm.c | 35 ++-
drivers/gpu/drm/ttm/tests/ttm_bo_validate_test.c | 8 +-
drivers/gpu/drm/ttm/tests/ttm_kunit_helpers.c | 2 -
drivers/gpu/drm/ttm/ttm_bo.c | 272 +++++++----------------
drivers/gpu/drm/ttm/ttm_bo_internal.h | 17 +-
drivers/gpu/drm/ttm/ttm_bo_util.c | 58 +++--
drivers/gpu/drm/ttm/ttm_device.c | 19 +-
drivers/gpu/drm/ttm/ttm_resource.c | 22 +-
drivers/gpu/drm/xe/xe_bo.c | 32 +--
include/drm/drm_exec.h | 2 +
include/drm/ttm/ttm_bo.h | 50 ++---
13 files changed, 296 insertions(+), 353 deletions(-)
---
base-commit: 44d19b8a7548aa25cbc6ebd5f27e958f7142c36b
change-id: 20260703-ttm_2_drm_exec-2dbdb1fb9d43
Best regards,
--
Natalie Vock <natalie.vock@xxxxxx>