18da673ccc
Three changes that together flip kernel-agent from spec'd to operational
in the manual-orchestrated form. Real ka-* CLI verbs come in later phases;
this commit gets a first iteration through the pipeline and proves the
flow at the artifact level.
1. Promote vb2_dma_resv RFC v2 series into the scope-tagged tree
Markus iterated v2 locally on boltzmann (kernel-agent-bootstrap dir,
reaching linux-fresnel-fourier pkgrel=14). v2 attaches the producer
fence at device_run in slept-OK context per Dufresne's v1 review on
linux-media. The three patches land under
patches/subsystem/media/videobuf2/dma-resv-release-fence/:
- 0004 (helper) — opt-in vb2 dma_resv producer-fence helper
- 0005 (driver opt-in) — hantro device_run attach
- 0006 (driver opt-in) — rockchip-rga device_run attach
Numbered 4/5/6 because the fresnel build PKGBUILD applies them after
the three 0001/0002/0003 PBP DTS patches; this directory's numbering
follows that apply-order, not the upstream lore series numbering.
README at the scope dir documents fleet eligibility, decision history,
and the v1 → v2 design pivot.
2. Update fleet/fresnel.yaml to include the v2 series
Pre-v2 manifest had a comment block 'Explicitly NOT included … vb2
dma-resv-release-fence … defer until v2 lands'. v2 has landed. Move
those three lines from 'excluded' to 'includes', annotate the decision
inline.
3. README updates
- Build hosts table: add ampere (CoolPi GenBook, RK3588 32GB) as
secondary aarch64 host. Same uarch as boltzmann, on-demand wake via
His. Gives the fleet a second native build target for when boltzmann
is busy (e.g. carrying a firefox-fourier 4h build).
- 'Out of scope this round' bootstrap section: mark vb2_dma_resv as
resolved 2026-05-15, keep panfrost IOMMU_CACHE deferred.
4. First ka-* CLI verb implemented: bin/ka-status
bash, ~120 lines. Reads fleet/*.yaml manifests, queries Gitea for
open [ka:*] issues, probes each reachable host for the installed
kernel-package version. Read-only — no sudo, no host writes. Picks
GITEA_TOKEN from /opt/herding/etc/claude-identities/<host>.creds or
env override.
Proves the agent's Gitea-API + manifest-parsing skeleton works
end-to-end without committing to a full ka-promote/build/install
implementation. Smoke-tested locally:
$ bin/ka-status
kernel-agent status (repo: marfrit/kernel-agent)
open [ka:*] issues total: 1
══ fresnel ══
manifest: arch=arm64 soc=rockchip/rk3399 board=pinebook-pro
package: linux-fresnel-fourier
installed: host-down # (fresnel is currently powered off)
open ka-issues: (none for this host)
No PKGBUILD update in this PR — that lives in marfrit-packages and
ships as a sibling PR (the actual linux-fresnel-fourier-7.0-14 publish).
118 lines
4.4 KiB
Diff
118 lines
4.4 KiB
Diff
From 2c63a63bf65739763051dc4ce7ce2ffaf2d514c4 Mon Sep 17 00:00:00 2001
|
|
In-Reply-To: <20260429195306.239666-1-mfritsche@reauktion.de>
|
|
References: <20260429195306.239666-1-mfritsche@reauktion.de>
|
|
From: Markus Fritsche <mfritsche@reauktion.de>
|
|
Date: Sat, 9 May 2026 16:50:51 +0200
|
|
Subject: [PATCH RFC v2] media: rockchip-rga: attach dma_resv release fence at
|
|
device_run
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Opt the rockchip-rga driver into the new vb2 release-fence helper.
|
|
|
|
Same shape as the hantro patch: attach a producer fence on the
|
|
CAPTURE-side dmabuf at m2m device_run, signalled by
|
|
vb2_buffer_done() when RGA completes the m2m operation.
|
|
|
|
Differs from hantro in one mechanical detail: rga's device_run
|
|
wraps the entire body in spin_lock_irqsave(&rga->ctrl_lock). Our
|
|
helper calls dma_resv_lock(), which is sleepable, so the
|
|
buffer-fetch + fence-attach sequence has to run above the spinlock.
|
|
Restructure device_run so:
|
|
|
|
- v4l2_m2m_next_src_buf / next_dst_buf,
|
|
- src->sequence increment,
|
|
- vb2_buffer_attach_release_fence(&dst->vb2_buf)
|
|
|
|
run before spin_lock_irqsave; only the rga->curr assignment and
|
|
rga_hw_start() (the actual HW kick) remain inside the spinlock.
|
|
|
|
This is safe under the m2m-job ownership model: by the time
|
|
device_run is called, the m2m core has selected this context and
|
|
serializes one device_run per context, so v4l2_m2m_next_*_buf
|
|
returns stable pointers until the corresponding *_buf_remove in
|
|
rga_isr. ctrl_lock was previously protecting per-device state
|
|
(rga->curr) and the HW register access, neither of which depends on
|
|
the buffer-fetch happening inside the lock.
|
|
|
|
The CAPTURE queue is opted in with supports_release_fences=true at
|
|
queue_init.
|
|
|
|
Userspace consumers of RGA-produced dmabufs (image-processing
|
|
pipelines, screen-rotation servers, gstreamer flows on Rockchip
|
|
boards) get spec-clean implicit-sync semantics, matching what
|
|
hantro does in the previous patch in this series.
|
|
|
|
Sven Püschel's ongoing "media: platform: rga: Add RGA3 support"
|
|
v5 series (linux-rockchip 2026-04-28) restructures rga.c
|
|
substantially. If that lands first, the device_run restructure
|
|
here will need a rebase against the new shape; the locking story
|
|
itself is invariant.
|
|
|
|
Cc: Jacob Chen <jacob-chen@iotwrt.com>
|
|
Cc: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
|
|
Cc: Sven Püschel <s.pueschel@pengutronix.de>
|
|
Cc: Heiko Stuebner <heiko@sntech.de>
|
|
Cc: Hans Verkuil <hverkuil@xs4all.nl>
|
|
Cc: linux-media@vger.kernel.org
|
|
Cc: linux-rockchip@lists.infradead.org
|
|
Signed-off-by: Markus Fritsche <mfritsche@reauktion.de>
|
|
---
|
|
drivers/media/platform/rockchip/rga/rga.c | 27 +++++++++++++++++++----
|
|
1 file changed, 23 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/drivers/media/platform/rockchip/rga/rga.c b/drivers/media/platform/rockchip/rga/rga.c
|
|
index fea63b94c..03030c7ea 100644
|
|
--- a/drivers/media/platform/rockchip/rga/rga.c
|
|
+++ b/drivers/media/platform/rockchip/rga/rga.c
|
|
@@ -38,15 +38,28 @@ static void device_run(void *prv)
|
|
struct vb2_v4l2_buffer *src, *dst;
|
|
unsigned long flags;
|
|
|
|
- spin_lock_irqsave(&rga->ctrl_lock, flags);
|
|
-
|
|
- rga->curr = ctx;
|
|
-
|
|
+ /*
|
|
+ * Fetch the next-job buffers and (best-effort) attach a producer
|
|
+ * fence on CAPTURE before taking ctrl_lock below.
|
|
+ * vb2_buffer_attach_release_fence() takes dma_resv_lock, which is
|
|
+ * sleepable; ctrl_lock is taken with spin_lock_irqsave so any
|
|
+ * sleepable call must happen above it. Buffer ownership is
|
|
+ * already committed at this point: the m2m core has selected
|
|
+ * this context for device_run and serializes one device_run per
|
|
+ * context, so v4l2_m2m_next_*_buf returns stable pointers until
|
|
+ * the corresponding *_buf_remove in rga_isr.
|
|
+ */
|
|
src = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
|
|
src->sequence = ctx->osequence++;
|
|
|
|
dst = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
|
|
|
|
+ (void)vb2_buffer_attach_release_fence(&dst->vb2_buf);
|
|
+
|
|
+ spin_lock_irqsave(&rga->ctrl_lock, flags);
|
|
+
|
|
+ rga->curr = ctx;
|
|
+
|
|
rga_hw_start(rga, vb_to_rga(src), vb_to_rga(dst));
|
|
|
|
spin_unlock_irqrestore(&rga->ctrl_lock, flags);
|
|
@@ -123,6 +136,12 @@ queue_init(void *priv, struct vb2_queue *src_vq, struct vb2_queue *dst_vq)
|
|
dst_vq->lock = &ctx->rga->mutex;
|
|
dst_vq->dev = ctx->rga->v4l2_dev.dev;
|
|
|
|
+ /*
|
|
+ * Opt the CAPTURE queue into vb2 release-fence publishing.
|
|
+ * Compile-time gated by CONFIG_VIDEOBUF2_RELEASE_FENCES.
|
|
+ */
|
|
+ dst_vq->supports_release_fences = true;
|
|
+
|
|
return vb2_queue_init(dst_vq);
|
|
}
|
|
|
|
--
|
|
2.53.0
|
|
|