From e7e79e5a76188ac46eb9d279af4bfed6eac01498 Mon Sep 17 00:00:00 2001 From: Markus Fritsche Date: Wed, 20 May 2026 21:26:16 +0200 Subject: [PATCH] =?UTF-8?q?daedalus-v4l2{,-dkms}:=20462aa4b=20->=20f0d4186?= =?UTF-8?q?=20=E2=80=94=20per-ctx=20vb2=20lock?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Upstream PR #3 — kernel per-context vb2_queue lock so concurrent clients of /dev/video0 don't serialise on a device-wide mutex. Pi 5 Firefox VAAPI playback (RDD + content + GPU processes each opening the device) now works without S_FMT EBUSY collisions. Verified on higgs: YouTube playback engages daedalus at sustained ~230 fps decode through the libavcodec dlopen path, ~7× headroom over the 30fps@1080p Pi 5 Fourier target. Both packages: pkgver 0.1.0.r24.f0d4186, pkgrel reset to 1. Co-Authored-By: Claude Opus 4.7 --- arch/daedalus-v4l2-dkms/PKGBUILD | 4 ++-- arch/daedalus-v4l2/PKGBUILD | 4 ++-- debian/daedalus-v4l2-dkms/build-deb.sh | 4 ++-- debian/daedalus-v4l2-dkms/debian/changelog | 10 ++++++++++ debian/daedalus-v4l2/build-deb.sh | 4 ++-- debian/daedalus-v4l2/debian/changelog | 19 +++++++++++++++++++ 6 files changed, 37 insertions(+), 8 deletions(-) diff --git a/arch/daedalus-v4l2-dkms/PKGBUILD b/arch/daedalus-v4l2-dkms/PKGBUILD index f343e5fea..db175211a 100644 --- a/arch/daedalus-v4l2-dkms/PKGBUILD +++ b/arch/daedalus-v4l2-dkms/PKGBUILD @@ -18,9 +18,9 @@ _module=daedalus_v4l2 # Same pin as arch/daedalus-v4l2 — keep kernel module + daemon # bit-versioned together so the chardev wire protocol stays in sync. -_commit=462aa4b4804972189d2f1b1ab5782f1ca1e8c423 +_commit=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 -pkgver=0.1.0.r22.462aa4b +pkgver=0.1.0.r24.f0d4186 pkgrel=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) pkgdesc="V4L2 stateless decoder shim kernel module (DKMS) — Pi 5 / CM5" arch=('any') diff --git a/arch/daedalus-v4l2/PKGBUILD b/arch/daedalus-v4l2/PKGBUILD index 8e0f882d6..728594322 100644 --- a/arch/daedalus-v4l2/PKGBUILD +++ b/arch/daedalus-v4l2/PKGBUILD @@ -21,11 +21,11 @@ _upstreampkg=daedalus-v4l2 # ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands a # pixel-correct decoded frame back in ffmpeg. Promote to a later pin # only after a future phase closes cleanly. -_commit=462aa4b4804972189d2f1b1ab5782f1ca1e8c423 +_commit=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 # 0.1.0 (pre-1.0) + commit count + short sha. Bump the .Y on each # Phase 8.x close. pkgver() recomputes at build time. -pkgver=0.1.0.r22.462aa4b +pkgver=0.1.0.r24.f0d4186 pkgrel=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) pkgdesc="Userspace daemon for the daedalus-v4l2 V4L2 stateless decoder shim (VP9/AV1/H.264 on Pi 5 / CM5)" arch=('aarch64') diff --git a/debian/daedalus-v4l2-dkms/build-deb.sh b/debian/daedalus-v4l2-dkms/build-deb.sh index 0cd5167aa..e0cea45c0 100755 --- a/debian/daedalus-v4l2-dkms/build-deb.sh +++ b/debian/daedalus-v4l2-dkms/build-deb.sh @@ -14,8 +14,8 @@ # Sibling userspace package: ../daedalus-v4l2/build-deb.sh set -euo pipefail -UPSTREAM_COMMIT=462aa4b4804972189d2f1b1ab5782f1ca1e8c423 -PKGVER=0.1.0+r22+g462aa4b +UPSTREAM_COMMIT=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 +PKGVER=0.1.0+r24+gf0d4186 PKGREL=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) MODULE_NAME=daedalus_v4l2 diff --git a/debian/daedalus-v4l2-dkms/debian/changelog b/debian/daedalus-v4l2-dkms/debian/changelog index 736b39e80..763bde3c2 100644 --- a/debian/daedalus-v4l2-dkms/debian/changelog +++ b/debian/daedalus-v4l2-dkms/debian/changelog @@ -1,3 +1,13 @@ +daedalus-v4l2-dkms (0.1.0+r24+gf0d4186-1) bookworm trixie; urgency=medium + + * Bump to f0d4186 — per-ctx vb2 lock fix. daedalus_queue_init now + uses ctx->vb_mutex instead of ctx->dev->m2m_lock for each + vb2_queue's lock, unblocking Firefox's multi-process VAAPI + clients (they were colliding on the device-wide mutex and one + would EBUSY-fail S_FMT while another was mid-streamon). + + -- Markus Fritsche Wed, 20 May 2026 23:00:00 +0000 + daedalus-v4l2-dkms (0.1.0+r22+g462aa4b-1) bookworm trixie; urgency=medium * Bump to 462aa4b — kernel device_run() now calls diff --git a/debian/daedalus-v4l2/build-deb.sh b/debian/daedalus-v4l2/build-deb.sh index cb37da284..25560971d 100755 --- a/debian/daedalus-v4l2/build-deb.sh +++ b/debian/daedalus-v4l2/build-deb.sh @@ -15,8 +15,8 @@ set -euo pipefail # end-to-end via libva (consumer target hit)" — first commit where the # full ffmpeg -hwaccel vaapi → libva → /dev/video0 → daemon path lands # a pixel-correct decoded frame back in ffmpeg. -UPSTREAM_COMMIT=462aa4b4804972189d2f1b1ab5782f1ca1e8c423 -PKGVER=0.1.0+r22+g462aa4b +UPSTREAM_COMMIT=f0d41867f60f5bf8dbfcc6cc16404d7d7eb90014 +PKGVER=0.1.0+r24+gf0d4186 PKGREL=1 # reset for new upstream pin (3dd0eb0 — DAEMON-PPS H.264 SPS/PPS NAL synth) HERE=$(dirname "$(readlink -f "$0")") diff --git a/debian/daedalus-v4l2/debian/changelog b/debian/daedalus-v4l2/debian/changelog index c8ef631ff..19294756d 100644 --- a/debian/daedalus-v4l2/debian/changelog +++ b/debian/daedalus-v4l2/debian/changelog @@ -1,3 +1,22 @@ +daedalus-v4l2 (0.1.0+r24+gf0d4186-1) bookworm trixie; urgency=medium + + * Bump to f0d4186 — kernel per-ctx vb2 lock fix. daedalus_queue_init + was wiring src_vq->lock and dst_vq->lock to ctx->dev->m2m_lock (a + device-wide mutex), serialising every vb2 ioctl across all + concurrent clients of /dev/video0. For Firefox (which spawns + separate content + RDD + GPU processes that each open the device + and run libva probe simultaneously), one libva session's + S_FMT(OUTPUT_MPLANE) hit EBUSY while another was mid-streamon — + Firefox VAAPI playback fell apart at startup. + * Fix gives each open() its own ctx->vb_mutex; vb2 ioctls run + independently per client. Matches cedrus / rkvdec / hantro + pattern. + * Verified on higgs: Firefox YouTube playback engages VAAPI cleanly, + sustained ~230 fps decode at 640x368 through the daedalus daemon, + zero EBUSY in stderr or daemon journal. + + -- Markus Fritsche Wed, 20 May 2026 23:00:00 +0000 + daedalus-v4l2 (0.1.0+r22+g462aa4b-1) bookworm trixie; urgency=medium * Bump to 462aa4b — kernel-side fix for control-binding gap that