From: sashiko-bot@kernel.org
To: 2564278112@qq.com
Cc: dri-devel@lists.freedesktop.org
Subject: Re: [PATCH] drm/radeon: restore hardware polling in fence_is_signaled to fix performance regression
Date: Wed, 29 Jul 2026 10:47:14 +0000 [thread overview]
Message-ID: <20260729104714.B16401F000E9@smtp.kernel.org> (raw)
In-Reply-To: <tencent_BB2A7CAE632BA0AC08D9296E78A15786200A@qq.com>
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Calling `radeon_fence_activity()` in `.signaled` callback consumes hardware state without waking up wait queues, leading to permanent hangs.
- [Medium] Acquiring an `rw_semaphore` in the `dma_fence_ops.signaled` callback violates wait-context rules and can crash PREEMPT_RT kernels.
--
--- Patch [1]: [PATCH] drm/radeon: restore hardware polling in fence_is_signaled to fix performance regression ---
commit 23682e8220434ea07b863fe650003e08c35ce798
Author: Wang Jiang <jiangwang@kylinos.cn>
drm/radeon: restore hardware polling in fence_is_signaled to fix performance regression
This commit restores hardware polling by calling radeon_fence_activity()
wrapped in down_read_trylock() inside radeon_fence_is_signaled(). This is
intended to fix performance regressions without re-introducing deadlocks.
> diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
> index 02a40e4750c7d..299865569252d 100644
> --- a/drivers/gpu/drm/radeon/radeon_fence.c
> +++ b/drivers/gpu/drm/radeon/radeon_fence.c
> @@ -360,6 +360,13 @@ static bool radeon_fence_is_signaled(struct dma_fence *f)
> if (atomic64_read(&rdev->fence_drv[ring].last_seq) >= seq)
> return true;
>
> + if (down_read_trylock(&rdev->exclusive_lock)) {
> + radeon_fence_activity(rdev, ring);
[Severity: High]
Does this consume the hardware state and drop the wake signal?
When a thread calls dma_fence_is_signaled() via polling, it invokes
radeon_fence_is_signaled(), which then calls radeon_fence_activity().
The hardware sequence is read, last_seq is advanced, and it returns true.
However, radeon_fence_is_signaled() intentionally drops this return value and
skips wake_up_all(). Later, when the actual hardware interrupt fires,
radeon_fence_process() calls radeon_fence_activity() again.
Because last_seq was already advanced, it sees no new activity
(seq <= last_seq), returns false, and skips wake_up_all().
Could this steal the wake event and cause tasks waiting on fences to hang
indefinitely?
> + up_read(&rdev->exclusive_lock);
[Severity: Medium]
Is it safe to manipulate an rw_semaphore in the dma_fence_ops.signaled
callback?
The dma_fence_ops.signaled callback can be called from atomic context or
directly from a foreign device's hardirq handler due to cross-device
dependencies.
While down_read_trylock() avoids sleeping on acquire, up_read() still
manipulates the underlying lock state. On PREEMPT_RT, this is an rt_mutex,
and manipulating it from hardirq context violates RT constraints, potentially
leading to a crash.
> +
> + if (atomic64_read(&rdev->fence_drv[ring].last_seq) >= seq)
> + return true;
> + }
> return false;
> }
--
Sashiko AI review · https://sashiko.dev/#/patchset/tencent_BB2A7CAE632BA0AC08D9296E78A15786200A@qq.com?part=1
prev parent reply other threads:[~2026-07-29 10:47 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-29 10:26 [PATCH] drm/radeon: restore hardware polling in fence_is_signaled to fix performance regression 2564278112
2026-07-29 10:47 ` sashiko-bot [this message]
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=20260729104714.B16401F000E9@smtp.kernel.org \
--to=sashiko-bot@kernel.org \
--cc=2564278112@qq.com \
--cc=dri-devel@lists.freedesktop.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.