forked from marfrit/marfrit-packages
a7892bfabc
Drafted but not yet compile-tested or runtime-validated. Draft
target: vb2 grows an opt-in dma_resv release-fence API; hantro and
rockchip-rga opt in as the demonstration drivers.
Series structure:
- 0000-cover-letter.patch — context, motivation, validation results
- 0001-media-videobuf2-add-dma_resv-release-fence-helper.patch
Adds vb2_buffer_attach_release_fence() that drivers call from
their buf_queue callback. Stores the fence on vb->release_fence;
vb2_buffer_done signals + puts. Per-queue fence context allocated
at vb2_core_queue_init.
- 0002-media-hantro-attach-dma_resv-release-fence-at-buf_queue.patch
Single call in hantro_buf_queue. ~5 lines.
- 0003-media-rockchip-rga-attach-dma_resv-release-fence-at-buf_queue.patch
Same shape in rga_buf_queue. ~5 lines.
Pre-flight before sending to linux-media (per kernel/README.md):
1. Compile the touched files against the kernel tree the patches
will land on (linux-next master as of 2026-04-28 was the source
of truth used for context-line generation).
2. Boot-test on ohm, smoke-test hantro + rga buffer flows.
3. Validate the fence semantics: install patched kernel, uninstall
kwin-fourier so KWin's watchDmaBuf is active, play 1080p30 H.264
under KDE Plasma — should plays through without the bypass
because the fence is now real.
4. Capture before/after dma_buf_export_sync_file timings.
5. Send via git format-patch --cover-letter to linux-media@,
CC dri-devel@ and the relevant maintainers.
This series is the kernel-correct fix for the architectural hole
that the chromium-fourier campaign's kwin-fourier package is
papering over. With this kernel side upstream, kwin-fourier
becomes either redundant (if KWin's existing wait works correctly)
or rewritten as a poll-fd-direct optimization.
48 lines
1.9 KiB
Diff
48 lines
1.9 KiB
Diff
From: Markus Fritsche <mfritsche@reauktion.de>
|
|
Subject: [PATCH RFC 3/3] media: rockchip-rga: attach dma_resv release fence at buf_queue
|
|
Date: 2026-04-28
|
|
|
|
Opt the Rockchip RGA driver into the new vb2 release-fence helper.
|
|
|
|
Same shape as the hantro patch: the existing buf_queue path enqueues
|
|
the buffer in the driver's m2m queue via v4l2_m2m_buf_queue, and we
|
|
additionally attach a release fence to each plane's dmabuf->resv via
|
|
vb2_buffer_attach_release_fence(). vb2_buffer_done signals the fence
|
|
when RGA completes the M2M operation.
|
|
|
|
Userspace consumers of RGA-produced dmabufs (image-processing
|
|
pipelines, screen-rotation servers, gstreamer flows) get spec-clean
|
|
implicit-sync semantics, matching what hantro now does in the same
|
|
patch series.
|
|
|
|
Signed-off-by: Markus Fritsche <mfritsche@reauktion.de>
|
|
---
|
|
drivers/media/platform/rockchip/rga/rga-buf.c | 11 +++++++++++
|
|
1 file changed, 11 insertions(+)
|
|
|
|
diff --git a/drivers/media/platform/rockchip/rga/rga-buf.c b/drivers/media/platform/rockchip/rga/rga-buf.c
|
|
--- a/drivers/media/platform/rockchip/rga/rga-buf.c
|
|
+++ b/drivers/media/platform/rockchip/rga/rga-buf.c
|
|
@@ -150,7 +150,18 @@ static void rga_buf_queue(struct vb2_buffer *vb)
|
|
{
|
|
struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
|
|
struct rga_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
|
|
|
|
v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vbuf);
|
|
+
|
|
+ /*
|
|
+ * Opt in to vb2's dma_resv release-fence path so userspace
|
|
+ * consumers of RGA-produced dmabufs get a real producer fence
|
|
+ * to wait on instead of the dma_buf core's substitute stub
|
|
+ * fence. See the leading patch in this series for rationale
|
|
+ * and the helper definition. Best-effort: a fence-allocation
|
|
+ * failure means we lose implicit-sync precision but the m2m
|
|
+ * operation itself proceeds normally.
|
|
+ */
|
|
+ (void)vb2_buffer_attach_release_fence(vb);
|
|
}
|
|
|
|
static void rga_buf_cleanup(struct vb2_buffer *vb)
|
|
--
|
|
2.44.0
|