From: Philipp Stanner <phasta@kernel.org>
To: "Sumit Semwal" <sumit.semwal@linaro.org>,
"Christian König" <christian.koenig@amd.com>,
"Philipp Stanner" <phasta@kernel.org>,
"Danilo Krummrich" <dakr@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Tamir Duberstein" <tamird@kernel.org>,
"Alexandre Courbot" <acourbot@nvidia.com>,
"Onur Özkan" <work@onurozkan.dev>,
"Matthew Brost" <matthew.brost@intel.com>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Tvrtko Ursulin" <tursulin@ursulin.net>
Cc: linux-kernel@vger.kernel.org, linux-media@vger.kernel.org,
dri-devel@lists.freedesktop.org, rust-for-linux@vger.kernel.org
Subject: [PATCH 6/8] rust: DmaFence: Pass result in callbacks
Date: Fri, 6 Nov 2026 15:07:51 +0100 [thread overview]
Message-ID: <20261106140752.520386-8-phasta@kernel.org> (raw)
In-Reply-To: <20261106140752.520386-2-phasta@kernel.org>
A FenceCallbackRegistration invokes the on_signal() trait functions
specified by the user. These callbacks always get executed, even if the
fence was signaled with an error. The user must then be able to react
accordingly.
Since the fence->error must only be set before a fence signals, and must
not change after it signaled, we better acquire it with the lock.
Change the on_signal() trait function so that the implementor always
receives the fence's actual state.
Signed-off-by: Philipp Stanner <phasta@kernel.org>
---
rust/kernel/dma_buf/dma_fence.rs | 25 ++++++++++++++++++-------
1 file changed, 18 insertions(+), 7 deletions(-)
diff --git a/rust/kernel/dma_buf/dma_fence.rs b/rust/kernel/dma_buf/dma_fence.rs
index b0c0e32462ae..f7f9887b8502 100644
--- a/rust/kernel/dma_buf/dma_fence.rs
+++ b/rust/kernel/dma_buf/dma_fence.rs
@@ -293,9 +293,12 @@ fn from(e: AllocError) -> Self {
/// }
///
/// impl FenceCallback for MyCallback {
-/// fn on_signal(&mut self) {
-/// pr_info!("Fence signaled!\n");
-/// // Handle fence completion
+/// fn on_signal(&mut self, status: Result) {
+/// if status.is_ok() {
+/// pr_info!("Fence signaled!\n");
+/// } else {
+/// pr_err!("Fence signaled with an error!\n");
+/// }
/// }
/// }
/// ```
@@ -310,7 +313,7 @@ pub trait FenceCallback: Send {
/// An implementation likely wants to inform itself (e.g., through a work item)
/// within this callback that the associated [`FenceCallbackRegistration`]
/// can now be dropped.
- fn on_signal(&mut self);
+ fn on_signal(&mut self, status: Result);
}
/// A callback registration on a fence.
@@ -397,11 +400,15 @@ pub unsafe fn new<'a>(
// embedded into a `FenceCallbackRegistration`.
let reg: *mut Self = unsafe { container_of!(ptr, Self, callback_foreign) };
+ // SAFETY: `reg` was created validly above. The fence is guaranteed to be
+ // signaled since this here is a fence callback.
+ let fence_result = unsafe { (*reg).fence.__status() };
+
// SAFETY: `reg` is a valid `Self` pointer.
//
// The backend ensures synchronisation so whoever holds the registration object cannot drop
// it while this code is running. See `FenceCallbackRegistration::drop`.
- unsafe { (*reg).callback.on_signal() };
+ unsafe { (*reg).callback.on_signal(fence_result) };
}
/// Returns a reference to the fence this callback is registered on.
@@ -680,8 +687,12 @@ struct DriverFenceData<'a, T: Send + Sync + FenceContextOps> {
/// struct CallbackData { }
///
/// impl FenceCallback for CallbackData {
-/// fn on_signal(&mut self) {
-/// pr_info!("DmaFence callback executed.\n");
+/// fn on_signal(&mut self, status: Result) {
+/// if status.is_ok() {
+/// pr_info!("DmaFence callback executed.\n");
+/// } else {
+/// pr_err!("DmaFence callback executed, but fence has an error.\n");
+/// }
/// }
/// }
///
--
2.56.0
next prev parent reply other threads:[~2026-11-06 14:09 UTC|newest]
Thread overview: 9+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-06 14:07 [PATCH 0/8] rust: Add drm::JobQueue Philipp Stanner
2026-11-06 14:07 ` [PATCH 1/8] rust: DmaFence: Implement Deref for FenceContext Philipp Stanner
2026-11-06 14:07 ` [PATCH 2/8] rust: DmaFence: Add ID accessor " Philipp Stanner
2026-11-06 14:07 ` [PATCH 3/8] rust: DmaFence: Don't drop on signal Philipp Stanner
2026-11-06 14:07 ` [PATCH 4/8] rust: DmaFence: Replace call_rcu() with synchronize_rcu() Philipp Stanner
2026-11-06 14:07 ` [PATCH 5/8] rust: DmaFence: Replace is_signaled() with status() Philipp Stanner
2026-11-06 14:07 ` Philipp Stanner [this message]
2026-11-06 14:07 ` [PATCH 7/8] rust: drm: Add JobQueue Philipp Stanner
2026-11-06 14:07 ` [PATCH 8/8] MAINTAINERS: Add drm::JobQueue to drm_sched's entry Philipp Stanner
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=20261106140752.520386-8-phasta@kernel.org \
--to=phasta@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=airlied@gmail.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=christian.koenig@amd.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=matthew.brost@intel.com \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=simona@ffwll.ch \
--cc=sumit.semwal@linaro.org \
--cc=tamird@kernel.org \
--cc=tmgross@umich.edu \
--cc=tursulin@ursulin.net \
--cc=work@onurozkan.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
all inboxes | Powered by JetHome®