From: sashiko-bot@kernel.org
To: "Philipp Stanner" <phasta@kernel.org>
Cc: dri-devel@lists.freedesktop.org, media-ci@linuxtv.org,
ojeda@kernel.org, gary@garyguo.net
Subject: Re: [PATCH 5/8] rust: DmaFence: Replace is_signaled() with status()
Date: Fri, 06 Nov 2026 14:18:44 +0000 [thread overview]
Message-ID: <sashiko-outbox-201565@kernel.org> (raw)
In-Reply-To: <20261106140752.520386-7-phasta@kernel.org>
Thank you for your contribution! Sashiko AI review found 1 potential
issue to consider:
- [Low] rust: dma_fence: missing #[inline] on Fence::status() and
Fence::__status()
--
commit a2517bd1921c87adc707463adc2934165a311348
Author: Philipp Stanner <phasta@kernel.org>
rust: DmaFence: Replace is_signaled() with status()
This commit replaces Fence::is_signaled() with Fence::status() and
introduces FenceStatus so callers check whether a signaled fence completed
with an error under the fence lock.
> diff --git a/rust/kernel/dma_buf/dma_fence.rs b/rust/kernel/dma_buf/dma_fence.rs
> index f74119b4d7f87..b0c0e32462aeb 100644
> --- a/rust/kernel/dma_buf/dma_fence.rs
> +++ b/rust/kernel/dma_buf/dma_fence.rs
> @@ -504,40 +504,49 @@ unsafe impl Send for Fence {}
> // SAFETY: Fences are literally designed to be shared between threads.
> unsafe impl Sync for Fence {}
>
> +/// Fence-Status queried through [`Fence::status()`].
> +#[derive(Debug)]
> +pub enum FenceStatus {
> + /// The fence is not yet signaled.
> + Unsignaled,
> + /// The fence is signaled. Might have been signaled with an error.
> + Signaled(Result),
> +}
> +
> impl Fence {
> - /// Check whether the fence was signaled at the moment of the function call.
> + /// Query a fence's error code and turn it into a [`Result`].
> ///
> - /// Note that this can return `true` for a [`Fence`] whose [`DriverFence`]
> - /// has not yet been dropped. The reason is that the fence ops callbacks can
> - /// cause the fence to get signaled by the C backend.
> - #[inline]
> - pub fn is_signaled(&self) -> bool {
[ ... ]
> + /// # Safety
> + ///
> + /// The caller must only call this on fences that are already signaled.
> + unsafe fn __status(&self) -> Result {
> + // SAFETY: Safe by the function's safety requirements.
> + let res = unsafe { (*self.as_raw()).error };
>
> - ret
> + to_result(res)
> + }
> +
> + /// Query a fence's status at the moment of the function call.
> + ///
> + /// If it is signaled, return the fence's result, i.e., determine if it was
> + /// signaled with an error.
> + pub fn status(&self) -> FenceStatus {
> + // The C backend provides `dma_fence_is_signaled()`. However, this is
> + // currently racy and could lead to misordering with our reading of the
> + // fence error code. Take the lock to prevent that.
> + let fence = self.lock();
> + // SAFETY: `fence` is valid because `self` is valid. The lock was
> + // taken above.
> + let signaled = unsafe { bindings::dma_fence_is_signaled_locked(fence.as_raw()) };
> +
> + if signaled {
> + // SAFETY: The fence is signaled.
> + let status = unsafe { fence.__status() };
> +
> + return FenceStatus::Signaled(status);
> + }
> +
> + FenceStatus::Unsignaled
> }
[Severity: Low]
Should Fence::__status() and Fence::status() retain the #[inline] attribute
that Fence::is_signaled() had, so downstream crates can inline these small
C-binding wrappers across crate boundaries?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261106140752.520386-2-phasta@kernel.org?part=5
next prev parent reply other threads:[~2026-11-06 14:18 UTC|newest]
Thread overview: 15+ 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:27 ` sashiko-bot
2026-11-06 14:07 ` [PATCH 4/8] rust: DmaFence: Replace call_rcu() with synchronize_rcu() Philipp Stanner
2026-11-06 14:15 ` sashiko-bot
2026-11-06 14:07 ` [PATCH 5/8] rust: DmaFence: Replace is_signaled() with status() Philipp Stanner
2026-11-06 14:18 ` sashiko-bot [this message]
2026-11-06 14:07 ` [PATCH 6/8] rust: DmaFence: Pass result in callbacks Philipp Stanner
2026-11-06 14:07 ` [PATCH 7/8] rust: drm: Add JobQueue Philipp Stanner
2026-11-06 14:46 ` sashiko-bot
2026-11-07 13:55 ` Younes Akhouayri
2026-11-10 9:14 ` 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=sashiko-outbox-201565@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=media-ci@linuxtv.org \
--cc=ojeda@kernel.org \
--cc=phasta@kernel.org \
--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 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.