From: Karl Mehltretter <kmehltretter@gmail.com>
To: linux-media@vger.kernel.org
Cc: "Tomasz Figa" <tfiga@chromium.org>,
"Marek Szyprowski" <m.szyprowski@samsung.com>,
"Mauro Carvalho Chehab" <mchehab@kernel.org>,
"Laurent Pinchart" <laurent.pinchart@ideasonboard.com>,
"Hans de Goede" <hansg@kernel.org>,
"Hans Verkuil" <hverkuil@kernel.org>,
"Benjamin Gaignard" <benjamin.gaignard@collabora.com>,
"Tomasz Stanislawski" <t.stanislaws@samsung.com>,
"Sumit Semwal" <sumit.semwal@linaro.org>,
"Christian König" <christian.koenig@amd.com>,
dri-devel@lists.freedesktop.org, linaro-mm-sig@lists.linaro.org,
linux-kernel@vger.kernel.org,
"Karl Mehltretter" <kmehltretter@gmail.com>
Subject: [PATCH 0/4] media: synchronize CPU access to imported DMA-BUFs
Date: Mon, 19 Oct 2026 09:14:07 +0200 [thread overview]
Message-ID: <cover.1792392288.git.kmehltretter@gmail.com> (raw)
UVC and vivid access imported DMA-BUFs with the CPU without cache
synchronization. On a Pi 400, captured data remained in the CPU cache
while physical RAM was stale.
Add an opt-in queue flag to bracket CPU access from buf_prepare() through
buf_finish(). The allocator cannot imply CPU use because some vb2-vmalloc
drivers pass buffers to hardware. Patch 1 balances finish operations in
VIDIOC_REMOVE_BUFS so removing prepared buffers closes this interval.
This follows the per-queue flag proposed here:
https://lists.openwall.net/linux-kernel/2024/06/20/236
Based on Linux 7.3. Tests cover the same code on these earlier bases:
- Pi 400, 7.3-rc4, all four patches: eight 640x480 YUYV frames per run,
imported CMA DMA-BUFs with a DRM device mapping:
Path Runs Stale frames
UVC, vb2-vmalloc 12 0/96
vivid, vb2-vmalloc 12 0/96
vivid, vb2-dma-contig 12 0/96
All six lifecycle cases passed with both vivid allocators. Read-only
output USERPTR passed. The test added no warnings or failed CPU-access
callbacks. A control without the DRM mapping found 4/16 stale frames.
- SAM9X75 (ARMv5), 6.18 backport of all four patches: the baseline
PREPARE_BUF/REMOVE_BUFS imbalance was fixed. USERPTR and six lifecycle
cases passed. All 128 vivid and 96 UVC frames matched RAM, with 100/100
begin/end calls. The baseline was already coherent.
- BeagleV Ahead (RISC-V), 7.3-rc7, patches 1, 2 and 4: read-only USERPTR,
six traced lifecycle cases and 60 repeats passed with balanced callbacks
and no kernel diagnostics. A vendor 5.10 backport of patches 2 and 3
captured 96 UVC frames without stale data, with 100/100 begin/end calls.
Its baseline was already coherent.
Karl Mehltretter (4):
media: videobuf2: finish prepared buffers in VIDIOC_REMOVE_BUFS
media: videobuf2: add opt-in DMA-BUF CPU access
media: uvcvideo: synchronize imported DMA-BUFs for CPU access
media: vivid: synchronize imported DMA-BUFs for CPU access
.../media/common/videobuf2/videobuf2-core.c | 96 ++++++++++++++++++-
.../common/videobuf2/videobuf2-dma-contig.c | 5 +-
.../media/common/videobuf2/videobuf2-dma-sg.c | 5 +-
.../common/videobuf2/videobuf2-vmalloc.c | 5 +-
drivers/media/test-drivers/vivid/vivid-core.c | 1 +
drivers/media/usb/uvc/uvc_queue.c | 1 +
include/media/videobuf2-core.h | 12 ++-
7 files changed, 116 insertions(+), 9 deletions(-)
base-commit: c03c1a14507dfaf8b856c2608f9ac216021fc222
--
2.47.3
next reply other threads:[~2026-10-19 7:14 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-19 7:14 Karl Mehltretter [this message]
2026-10-19 7:14 ` [PATCH 1/4] media: videobuf2: finish prepared buffers in VIDIOC_REMOVE_BUFS Karl Mehltretter
2026-10-19 7:14 ` [PATCH 2/4] media: videobuf2: add opt-in DMA-BUF CPU access Karl Mehltretter
2026-10-19 7:14 ` [PATCH 3/4] media: uvcvideo: synchronize imported DMA-BUFs for " Karl Mehltretter
2026-10-19 7:14 ` [PATCH 4/4] media: vivid: " Karl Mehltretter
2026-10-19 12:44 ` [PATCH 0/4] media: synchronize CPU access to imported DMA-BUFs Laurent Pinchart
2026-10-19 14:48 ` Christian König
2026-10-19 15:01 ` Laurent Pinchart
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=cover.1792392288.git.kmehltretter@gmail.com \
--to=kmehltretter@gmail.com \
--cc=benjamin.gaignard@collabora.com \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=hansg@kernel.org \
--cc=hverkuil@kernel.org \
--cc=laurent.pinchart@ideasonboard.com \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=mchehab@kernel.org \
--cc=sumit.semwal@linaro.org \
--cc=t.stanislaws@samsung.com \
--cc=tfiga@chromium.org \
/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.