All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boris Brezillon <boris.brezillon@collabora.com>
To: "Christian König" <christian.koenig@amd.com>
Cc: phasta@kernel.org, dakr@kernel.org,
	Tvrtko Ursulin <tvrtko.ursulin@igalia.com>,
	dri-devel <dri-devel@lists.freedesktop.org>
Subject: Re: dma_fence: force users to take the lock manually
Date: Thu, 5 Mar 2026 16:12:12 +0100	[thread overview]
Message-ID: <20260305161212.7dfbadbd@fedora> (raw)
In-Reply-To: <718ad034-8fc2-4b43-9b04-729c5befc3ca@amd.com>

Hi,

On Thu, 5 Mar 2026 14:59:02 +0100
Christian König <christian.koenig@amd.com> wrote:

> On 3/5/26 14:54, Philipp Stanner wrote:
> > Yo Christian,
> > 
> > a while ago we were discussing this problem
> > 
> > dma_fence_set_error(f, -ECANCELED);

If you really have two concurrent threads setting the error, this part
is racy, though I can't think of any situation where concurrent
signaling of a set of fences wouldn't be protected by another external
lock.

> > dma_fence_signal(f); // racy!

This is not racy because dma_fence_signal() takes/releases the
lock internally. Besides, calling dma_fence_signal() on an already
signaled fence is considered an invalid pattern if I trust the -EINVAL
returned here[1].

> > 
> > 
> > I think you mentioned that you are considering to redesign the
> > dma_fence API so that users have to take the lock themselves to touch
> > the fence:
> > 
> > dma_fence_lock(f);
> > dma_fence_set_error(f, -ECANCELED);
> > dma_fence_signal(f);

I guess you mean dma_fence_signal_locked().

> > dme_fence_unlock(f);
> > 
> > 
> > Is that still up to date? Is there work in progress about that?  
> 
> It's on my "maybe if I ever have time for that" list, but yeah I think it would be really nice to have and a great cleanup.
> 
> We have a bunch of different functions which provide both a _locked() and _unlocked() variant just because callers where to lazy to lock the fence.
> 
> Especially the dma_fence_signal function is overloaded 4 (!) times with locked/unlocked and with and without timestamp functions.
> 
> > I discovered that I might need / want that for the Rust abstractions.  
> 
> Well my educated guess is for Rust you only want the locked function and never allow callers to be lazy.

I don't think we have an immediate need for manual locking in rust
drivers (no signaling done under an already dma_fence-locked section
that I can think of), especially after the inline_lock you've
introduced. Now, I don't think it matters if only the _locked() variant
is exposed and the rust code is expected to acquire/release the lock
manually, all I'm saying is that we probably don't need that in drivers
(might be different if we start implementing fence containers like
arrays and chain in rust, but I don't think we have an immediate need
for that).

Regards,

Boris

[1]https://elixir.bootlin.com/linux/v6.19.3/source/drivers/dma-buf/dma-fence.c#L375

  reply	other threads:[~2026-03-05 15:12 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-03-05 13:54 dma_fence: force users to take the lock manually Philipp Stanner
2026-03-05 13:59 ` Christian König
2026-03-05 15:12   ` Boris Brezillon [this message]
2026-03-06  8:10     ` Christian König
2026-03-06  9:46       ` Boris Brezillon
2026-03-06  9:54         ` Philipp Stanner
2026-03-06 10:27           ` Boris Brezillon
2026-03-06  9:58         ` Christian König
2026-03-06 10:37           ` Boris Brezillon
2026-03-06 11:03             ` Christian König
2026-03-06 11:24               ` Boris Brezillon
2026-03-06 11:57                 ` Philipp Stanner
2026-03-06 12:31                   ` Christian König
2026-03-06 12:36                     ` Philipp Stanner
2026-03-06 12:54                       ` Christian König
2026-03-06 14:55                         ` Boris Brezillon
2026-03-09  9:33                           ` Christian König
2026-03-09 15:06                             ` Boris Brezillon
2026-03-09 16:46                               ` Christian König
2026-03-06 13:03                       ` Danilo Krummrich
2026-03-06 13:15                         ` Christian König
2026-03-06 13:36                           ` Philipp Stanner
2026-03-06 14:37                             ` Christian König
2026-03-06 15:25                               ` Boris Brezillon
2026-03-06 15:43                                 ` Boris Brezillon
2026-03-06 19:02                                   ` Philipp Stanner
2026-03-09  8:16                                     ` Boris Brezillon
2026-03-09  9:36                                       ` Christian König
2026-03-06 14:21                       ` Boris Brezillon
2026-03-06 12:48                   ` Boris Brezillon

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=20260305161212.7dfbadbd@fedora \
    --to=boris.brezillon@collabora.com \
    --cc=christian.koenig@amd.com \
    --cc=dakr@kernel.org \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=phasta@kernel.org \
    --cc=tvrtko.ursulin@igalia.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.