From: Natalie Vock <nat@pixelcluster.dev>
To: "Maarten Lankhorst" <maarten.lankhorst@linux.intel.com>,
"Maxime Ripard" <mripard@kernel.org>,
"Thomas Zimmermann" <tzimmermann@suse.de>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Jani Nikula" <jani.nikula@linux.intel.com>,
"Joonas Lahtinen" <joonas.lahtinen@linux.intel.com>,
"Rodrigo Vivi" <rodrigo.vivi@intel.com>,
"Tvrtko Ursulin" <tursulin@ursulin.net>,
"Christian Koenig" <christian.koenig@amd.com>,
"Huang Rui" <ray.huang@amd.com>,
"Matthew Auld" <matthew.auld@intel.com>,
"Matthew Brost" <matthew.brost@intel.com>,
"Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
"Alex Deucher" <alexander.deucher@amd.com>
Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org,
intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org,
amd-gfx@lists.freedesktop.org
Subject: [PATCH v2 00/10] Use drm_exec to lock TTM buffers, respin
Date: Mon, 06 Jul 2026 12:07:42 +0200 [thread overview]
Message-ID: <20260706-ttm_2_drm_exec-v2-0-4bf6bfc0d320@pixelcluster.dev> (raw)
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 <nat@pixelcluster.dev>
---
Changes in v2:
- Switched to my new email
- Reworked drm_exec patch for always reporting duplicates (Christian)
- Removed spurious continue; rebase artifact in swapout
- Removed incorrect trylock_only for evict_all
- Link to v1: https://patch.msgid.link/20260703-ttm_2_drm_exec-v1-0-43685ac1286b@gmx.de
---
Natalie Vock (10):
drm/exec: Add helper to bypass IGNORE_DUPLICATES flag
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
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 80 +++----
drivers/gpu/drm/drm_exec.c | 54 +++--
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 | 18 +-
drivers/gpu/drm/ttm/ttm_resource.c | 21 +-
drivers/gpu/drm/xe/xe_bo.c | 32 +--
include/drm/drm_exec.h | 2 +
include/drm/ttm/ttm_bo.h | 50 ++---
13 files changed, 295 insertions(+), 354 deletions(-)
---
base-commit: 44d19b8a7548aa25cbc6ebd5f27e958f7142c36b
change-id: 20260703-ttm_2_drm_exec-2dbdb1fb9d43
Best regards,
--
Natalie Vock <nat@pixelcluster.dev>
next reply other threads:[~2026-07-06 10:16 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-06 10:07 Natalie Vock [this message]
2026-07-06 10:07 ` [PATCH v2 01/10] drm/exec: Add helper to bypass IGNORE_DUPLICATES flag Natalie Vock
2026-07-06 11:40 ` Christian König
2026-07-06 10:07 ` [PATCH v2 02/10] drm/ttm: replace TTMs refcount with the DRM refcount v4 Natalie Vock
2026-07-06 11:47 ` Christian König
2026-07-06 10:07 ` [PATCH v2 03/10] drm/ttm: remove ttm_lru_walk_ops Natalie Vock
2026-07-06 10:07 ` [PATCH v2 04/10] drm/ttm: grab BO reference before locking it Natalie Vock
2026-07-06 10:07 ` [PATCH v2 05/10] drm/ttm: switch to ttm_bo_lru_for_each_reserved_guarded for swapout Natalie Vock
2026-07-06 10:07 ` [PATCH v2 06/10] drm/ttm: move zombie handling into ttm_bo_evict Natalie Vock
2026-07-06 10:07 ` [PATCH v2 07/10] drm/ttm: use ttm_bo_lru_for_each_reserved_guarded in evict_all Natalie Vock
2026-07-06 10:07 ` [PATCH v2 08/10] drm/xe: remove workaround for TTM internals Natalie Vock
2026-07-06 10:07 ` [PATCH v2 09/10] drm/ttm: support using drm_exec during eviction v4 Natalie Vock
2026-07-06 10:07 ` [PATCH v2 10/10] drm/amdgpu: use drm_exec during BO validation Natalie Vock
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260706-ttm_2_drm_exec-v2-0-4bf6bfc0d320@pixelcluster.dev \
--to=nat@pixelcluster.dev \
--cc=airlied@gmail.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=intel-gfx@lists.freedesktop.org \
--cc=intel-xe@lists.freedesktop.org \
--cc=jani.nikula@linux.intel.com \
--cc=joonas.lahtinen@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=matthew.auld@intel.com \
--cc=matthew.brost@intel.com \
--cc=mripard@kernel.org \
--cc=ray.huang@amd.com \
--cc=rodrigo.vivi@intel.com \
--cc=simona@ffwll.ch \
--cc=thomas.hellstrom@linux.intel.com \
--cc=tursulin@ursulin.net \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox