From: Boris Brezillon <boris.brezillon@collabora.com>
To: "Christian König" <ckoenig.leichtzumerken@gmail.com>
Cc: phasta@mailbox.org, matthew.brost@intel.com,
sumit.semwal@linaro.org, dri-devel@lists.freedesktop.org,
linaro-mm-sig@lists.linaro.org
Subject: Re: [PATCH 2/8] dma-buf: detach fence ops on signal v2
Date: Fri, 13 Feb 2026 15:22:57 +0100 [thread overview]
Message-ID: <20260213152257.2651e2bb@fedora> (raw)
In-Reply-To: <20260210102232.1642-3-christian.koenig@amd.com>
On Tue, 10 Feb 2026 11:01:57 +0100
"Christian König" <ckoenig.leichtzumerken@gmail.com> wrote:
> When neither a release nor a wait backend ops is specified it is possible
> to let the dma_fence live on independently of the module who issued it.
>
> This makes it possible to unload drivers and only wait for all their
> fences to signal.
>
> v2: fix typo in comment
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@igalia.com>
> Reviewed-by: Philipp Stanner <phasta@kernel.org>
Reviewed-by: Boris Brezillon <boris.brezillon@collabora.com>
One nit below.
> ---
> drivers/dma-buf/dma-fence.c | 16 ++++++++++++----
> include/linux/dma-fence.h | 4 ++--
> 2 files changed, 14 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/dma-buf/dma-fence.c b/drivers/dma-buf/dma-fence.c
> index de9bf18be3d4..ba02321bef0b 100644
> --- a/drivers/dma-buf/dma-fence.c
> +++ b/drivers/dma-buf/dma-fence.c
> @@ -371,6 +371,14 @@ void dma_fence_signal_timestamp_locked(struct dma_fence *fence,
> &fence->flags)))
> return;
>
> + /*
> + * When neither a release nor a wait operation is specified set the ops
> + * pointer to NULL to allow the fence structure to become independent
> + * from who originally issued it.
I think this deserves some comment in the dma_fence_ops doc, so that
people know what to expect when they implement this interface.
> + */
> + if (!fence->ops->release && !fence->ops->wait)
> + RCU_INIT_POINTER(fence->ops, NULL);
> +
> /* Stash the cb_list before replacing it with the timestamp */
> list_replace(&fence->cb_list, &cb_list);
>
> @@ -537,7 +545,7 @@ dma_fence_wait_timeout(struct dma_fence *fence, bool intr, signed long timeout)
> rcu_read_lock();
> ops = rcu_dereference(fence->ops);
> trace_dma_fence_wait_start(fence);
> - if (ops->wait) {
> + if (ops && ops->wait) {
> /*
> * Implementing the wait ops is deprecated and not supported for
> * issuer independent fences, so it is ok to use the ops outside
> @@ -602,7 +610,7 @@ void dma_fence_release(struct kref *kref)
> }
>
> ops = rcu_dereference(fence->ops);
> - if (ops->release)
> + if (ops && ops->release)
> ops->release(fence);
> else
> dma_fence_free(fence);
> @@ -638,7 +646,7 @@ static bool __dma_fence_enable_signaling(struct dma_fence *fence)
>
> rcu_read_lock();
> ops = rcu_dereference(fence->ops);
> - if (!was_set && ops->enable_signaling) {
> + if (!was_set && ops && ops->enable_signaling) {
> trace_dma_fence_enable_signal(fence);
>
> if (!ops->enable_signaling(fence)) {
> @@ -1024,7 +1032,7 @@ void dma_fence_set_deadline(struct dma_fence *fence, ktime_t deadline)
>
> rcu_read_lock();
> ops = rcu_dereference(fence->ops);
> - if (ops->set_deadline && !dma_fence_is_signaled(fence))
> + if (ops && ops->set_deadline && !dma_fence_is_signaled(fence))
> ops->set_deadline(fence, deadline);
> rcu_read_unlock();
> }
> diff --git a/include/linux/dma-fence.h b/include/linux/dma-fence.h
> index 6bf4feb0e01f..e1afbb5909f9 100644
> --- a/include/linux/dma-fence.h
> +++ b/include/linux/dma-fence.h
> @@ -472,7 +472,7 @@ dma_fence_is_signaled_locked(struct dma_fence *fence)
>
> rcu_read_lock();
> ops = rcu_dereference(fence->ops);
> - if (ops->signaled && ops->signaled(fence)) {
> + if (ops && ops->signaled && ops->signaled(fence)) {
> rcu_read_unlock();
> dma_fence_signal_locked(fence);
> return true;
> @@ -508,7 +508,7 @@ dma_fence_is_signaled(struct dma_fence *fence)
>
> rcu_read_lock();
> ops = rcu_dereference(fence->ops);
> - if (ops->signaled && ops->signaled(fence)) {
> + if (ops && ops->signaled && ops->signaled(fence)) {
> rcu_read_unlock();
> dma_fence_signal(fence);
> return true;
next prev parent reply other threads:[~2026-02-13 14:23 UTC|newest]
Thread overview: 35+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-10 10:01 Independence for dma_fences! v7 Christian König
2026-02-10 10:01 ` [PATCH 1/8] dma-buf: protected fence ops by RCU v5 Christian König
2026-02-11 10:06 ` Philipp Stanner
2026-02-11 15:43 ` Christian König
2026-02-12 8:56 ` Philipp Stanner
2026-02-19 10:23 ` Christian König
2026-02-19 10:35 ` Philipp Stanner
2026-02-19 12:49 ` Christian König
2026-02-12 9:03 ` Tvrtko Ursulin
2026-02-12 9:31 ` Tvrtko Ursulin
2026-02-13 14:20 ` Boris Brezillon
2026-02-10 10:01 ` [PATCH 2/8] dma-buf: detach fence ops on signal v2 Christian König
2026-02-13 14:22 ` Boris Brezillon [this message]
2026-02-19 12:52 ` Christian König
2026-02-19 15:49 ` Boris Brezillon
2026-02-10 10:01 ` [PATCH 3/8] dma-buf: abstract fence locking v2 Christian König
2026-02-12 9:07 ` Tvrtko Ursulin
2026-02-10 10:01 ` [PATCH 4/8] dma-buf: inline spinlock for fence protection v4 Christian König
2026-02-11 9:50 ` Philipp Stanner
2026-02-11 14:59 ` Christian König
2026-02-12 9:01 ` Philipp Stanner
2026-02-12 9:16 ` Tvrtko Ursulin
2026-02-13 14:27 ` Boris Brezillon
2026-02-15 8:48 ` Boris Brezillon
2026-02-16 7:33 ` Philipp Stanner
2026-02-16 9:48 ` Boris Brezillon
2026-02-10 10:02 ` [PATCH 5/8] dma-buf/selftests: test RCU ops and inline lock v2 Christian König
2026-02-10 10:02 ` [PATCH 6/8] dma-buf: use inline lock for the stub fence v2 Christian König
2026-02-13 14:32 ` Boris Brezillon
2026-02-10 10:02 ` [PATCH 7/8] dma-buf: use inline lock for the dma-fence-array Christian König
2026-02-13 14:33 ` Boris Brezillon
2026-02-10 10:02 ` [PATCH 8/8] dma-buf: use inline lock for the dma-fence-chain Christian König
2026-02-13 14:33 ` Boris Brezillon
[not found] <20260219160822.1529-1-christian.koenig@amd.com>
2026-02-19 16:07 ` [PATCH 2/8] dma-buf: detach fence ops on signal v2 Christian König
2026-02-21 15:28 ` kernel test robot
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=20260213152257.2651e2bb@fedora \
--to=boris.brezillon@collabora.com \
--cc=ckoenig.leichtzumerken@gmail.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=matthew.brost@intel.com \
--cc=phasta@mailbox.org \
--cc=sumit.semwal@linaro.org \
/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.