dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: sashiko-bot@kernel.org
To: "Natalie Vock" <natalie.vock@gmx.de>
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 08/10] drm/xe: remove workaround for TTM internals
Date: Fri, 03 Jul 2026 17:10:58 +0000	[thread overview]
Message-ID: <20260703171059.9AFCA1F00A3A@smtp.kernel.org> (raw)
In-Reply-To: <20260703-ttm_2_drm_exec-v1-8-43685ac1286b@gmx.de>

Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [Critical] Locking `ttm_bo->base.resv` while unlocking `&ttm_bo->base._resv` causes deadlocks and kernel panics for objects with shared reservation locks.
- [High] Execution continues unlocked if `dma_resv_trylock()` fails, leading to unsafe fence modification and panics.
--

commit 4a41e0d0f5b4b25aaadf25f72a1d222898154844
Author: Christian König <christian.koenig@amd.com>

drm/xe: remove workaround for TTM internals

This commit removes a workaround for TTM internals in
xe_ttm_bo_release_notify(). It replaces the custom
xe_ttm_bo_lock_in_destructor() function with a direct call to
dma_resv_trylock().

> diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
> index 5843f850339c7..34eae56716076 100644
> --- a/drivers/gpu/drm/xe/xe_bo.c
> +++ b/drivers/gpu/drm/xe/xe_bo.c

[ ... ]

> @@ -1680,8 +1655,11 @@ static void xe_ttm_bo_release_notify(struct ttm_buffer_object *ttm_bo)
>  	bo = ttm_to_xe_bo(ttm_bo);
>  	xe_assert(xe_bo_device(bo), !(bo->created && kref_read(&ttm_bo->base.refcount)));
>  
> -	if (!xe_ttm_bo_lock_in_destructor(ttm_bo))
> -		return;
> +	/*
> +	 * This should never fail since there are no other references to the BO
> +	 * any more.
> +	 */
> +	WARN_ON(!dma_resv_trylock(ttm_bo->base.resv));

[Severity: Critical]
Does this cause a locking mismatch between ttm_bo->base.resv and
&ttm_bo->base._resv?

For imported dma-buf objects, ttm_bo->base.resv points to the exporter's
shared reservation lock, while &ttm_bo->base._resv points to the local unused
reservation object.

The trylock now uses ttm_bo->base.resv, but the subsequent fence replacement
loop and the unlock in the same function still operate on &ttm_bo->base._resv:

	dma_resv_for_each_fence(&cursor, &ttm_bo->base._resv,
				DMA_RESV_USAGE_BOOKKEEP, fence) {
		...
	}
	dma_fence_put(replacement);

	dma_resv_unlock(&ttm_bo->base._resv);

Can this lead to the shared exporter lock being successfully acquired but never
unlocked (causing a deadlock), followed by a call to unlock the unheld local
_resv ww_mutex (triggering an immediate kernel panic)?

[Severity: High]
Is it safe to continue execution unconditionally if dma_resv_trylock() fails?

The previous implementation safely returned early if the lock failed. The new
implementation wraps the trylock in a WARN_ON(), which only logs a warning and
does not abort control flow.

For imported BOs, the reservation lock is shared with the exporter and other
drivers, meaning the lock can legitimately be contended and the trylock can
fail. Will this allow execution to proceed unconditionally to modify fences
and unlock the reservation without actually holding the lock?

>  
>  	/*
>  	 * Scrub the preempt fences if any. The unbind fence is already

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20260703-ttm_2_drm_exec-v1-0-43685ac1286b@gmx.de?part=8

  reply	other threads:[~2026-07-03 17:11 UTC|newest]

Thread overview: 50+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-07-03 16:31 [PATCH 00/10] Use drm_exec to lock TTM buffers, respin Natalie Vock
2026-07-03 16:31 ` [PATCH 01/10] drm/exec: Add helper to bypass IGNORE_DUPLICATES flag Natalie Vock
2026-07-03 16:38   ` sashiko-bot
2026-07-06  8:43   ` Christian König
2026-07-07 12:09   ` Thomas Hellström
2026-07-07 12:28     ` Christian König
2026-07-07 12:41       ` Thomas Hellström
2026-07-07 12:54         ` Christian König
2026-07-07 13:12           ` Natalie Vock
2026-07-03 16:31 ` [PATCH 02/10] drm/ttm: replace TTMs refcount with the DRM refcount v4 Natalie Vock
2026-07-06 13:14   ` Thomas Hellström
2026-07-06 14:49     ` Christian König
2026-07-06 17:01       ` Thomas Hellström
2026-07-06 17:51         ` Matthew Brost
2026-07-06 17:53           ` Thomas Hellström
2026-07-06 18:03             ` Matthew Brost
2026-07-06 18:05               ` Matthew Brost
2026-07-07  6:30                 ` Thomas Hellström
2026-07-06 18:03           ` Thomas Hellström
2026-07-06 18:23         ` Christian König
2026-07-06 22:26           ` Dave Airlie
2026-07-07  6:56           ` Thomas Hellström
2026-07-07  7:35             ` Natalie Vock
2026-07-07  8:48             ` Christian König
2026-07-07  9:53               ` Thomas Hellström
2026-07-07 12:52                 ` Christian König
2026-07-07 14:07                   ` Thomas Hellström
2026-07-03 16:31 ` [PATCH 03/10] drm/ttm: remove ttm_lru_walk_ops Natalie Vock
2026-07-06 12:34   ` Thomas Hellström
2026-07-06 13:05     ` Christian König
2026-07-06 16:31       ` Matthew Brost
2026-07-06 13:08     ` Natalie Vock
2026-07-03 16:31 ` [PATCH 04/10] drm/ttm: grab BO reference before locking it Natalie Vock
2026-07-07 12:12   ` Thomas Hellström
2026-07-03 16:31 ` [PATCH 05/10] drm/ttm: switch to ttm_bo_lru_for_each_reserved_guarded for swapout Natalie Vock
2026-07-03 16:55   ` sashiko-bot
2026-07-07 12:17   ` Thomas Hellström
2026-07-03 16:31 ` [PATCH 06/10] drm/ttm: move zombie handling into ttm_bo_evict Natalie Vock
2026-07-07 12:24   ` Thomas Hellström
2026-07-03 16:31 ` [PATCH 07/10] drm/ttm: use ttm_bo_lru_for_each_reserved_guarded in evict_all Natalie Vock
2026-07-03 17:10   ` sashiko-bot
2026-07-07 12:35   ` Thomas Hellström
2026-07-03 16:31 ` [PATCH 08/10] drm/xe: remove workaround for TTM internals Natalie Vock
2026-07-03 17:10   ` sashiko-bot [this message]
2026-07-07 11:52   ` Thomas Hellström
2026-07-03 16:31 ` [PATCH 09/10] drm/ttm: support using drm_exec during eviction v4 Natalie Vock
2026-07-03 17:23   ` sashiko-bot
2026-07-07 12:48   ` Thomas Hellström
2026-07-03 16:31 ` [PATCH 10/10] drm/amdgpu: use drm_exec during BO validation Natalie Vock
2026-07-03 17:24   ` sashiko-bot

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=20260703171059.9AFCA1F00A3A@smtp.kernel.org \
    --to=sashiko-bot@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=natalie.vock@gmx.de \
    --cc=sashiko-reviews@lists.linux.dev \
    /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