[PATCH RFC 0/3] media: Ensure access to dma-buf-imported reference buffers

From: Paul Kocialkowski
Date: Mon Jan 14 2019 - 08:39:11 EST


This is a first attempt at implementing proper access to buffers
imported with dma-buf and used as reference frames for decoding
subsequent frames.

The main concern associated with this scenario was that memory could be
liberated while the buffer is not in a queued state. After careful
checking, it appears that this is not the case as the refcount is
always increased when importing the buffer. It is only decreased when
the same buffer is queued with a different dma-buf fd or when all
buffers are liberated. In the meantime (when decoding using the frame as
a reference happens), the buffer is thus guaranteed to stay alive.

However, buffers imported with dma-buf require calls to dma-buf-specific
map/unmap memops before they are accessed. This introduces the plumbing
for allowing that.

One major issue is that it cannot be done in atomic context, where
the job is marked as completed. To solve this, a new m2m operation
(job_done) is introduced which allows releasing access to the
reference buffers from the m2m worker thread.

Since this series touches the core of vb2 and m2m and may not be the
best way to implement this, it is marked as RFC.

This series is based on the series starting with:
media: cedrus: Cleanup duplicate declarations from cedrus_dec header

Paul Kocialkowski (4):
media: vb2: Add helpers to access unselected buffers
media: v4l2-mem2mem: Add an optional job_done operation
media: cedrus: Request access to reference buffers when decoding
media: cedrus: Remove completed item from TODO list (dma-buf
references)

.../media/common/videobuf2/videobuf2-core.c | 46 +++++++++++++++++++
drivers/media/v4l2-core/v4l2-mem2mem.c | 8 +++-
drivers/staging/media/sunxi/cedrus/TODO | 5 --
drivers/staging/media/sunxi/cedrus/cedrus.c | 1 +
drivers/staging/media/sunxi/cedrus/cedrus.h | 1 +
.../staging/media/sunxi/cedrus/cedrus_dec.c | 18 ++++++++
.../staging/media/sunxi/cedrus/cedrus_dec.h | 1 +
.../staging/media/sunxi/cedrus/cedrus_mpeg2.c | 8 ++++
include/media/v4l2-mem2mem.h | 4 ++
include/media/videobuf2-core.h | 15 ++++++
10 files changed, 100 insertions(+), 7 deletions(-)

--
2.20.1