summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorNicolas Dufresne <nicolas.dufresne@collabora.com>2025-12-05 04:54:24 +0300
committerHans Verkuil <hverkuil+cisco@kernel.org>2026-01-05 17:56:31 +0300
commitdb6b97a4f8041e479be9ef4b8b07022636c96f50 (patch)
tree410fd48a8f331a8a0f7887018411164785fe8e9e /include
parent3e92d7e4935084ecdbdc88880cc4688618ae1557 (diff)
downloadlinux-db6b97a4f8041e479be9ef4b8b07022636c96f50.tar.xz
media: v4l2-mem2mem: Add a kref to the v4l2_m2m_dev structure
Adding a reference count to the v4l2_m2m_dev structure allow safely sharing it across multiple hardware nodes. This can be used to prevent running jobs concurrently on m2m cores that have some internal resource sharing. Signed-off-by: Ming Qian <ming.qian@oss.nxp.com> Reviewed-by: Frank Li <Frank.Li@nxp.com> Signed-off-by: Nicolas Dufresne <nicolas.dufresne@collabora.com> Signed-off-by: Hans Verkuil <hverkuil+cisco@kernel.org> [hverkuil: fix typos in v4l2_m2m_put documentation]
Diffstat (limited to 'include')
-rw-r--r--include/media/v4l2-mem2mem.h21
1 files changed, 21 insertions, 0 deletions
diff --git a/include/media/v4l2-mem2mem.h b/include/media/v4l2-mem2mem.h
index bf6a09a04dcf..31de25d792b9 100644
--- a/include/media/v4l2-mem2mem.h
+++ b/include/media/v4l2-mem2mem.h
@@ -548,6 +548,27 @@ v4l2_m2m_register_media_controller(struct v4l2_m2m_dev *m2m_dev,
void v4l2_m2m_release(struct v4l2_m2m_dev *m2m_dev);
/**
+ * v4l2_m2m_get() - take a reference to the m2m_dev structure
+ *
+ * @m2m_dev: opaque pointer to the internal data to handle M2M context
+ *
+ * This is used to share the M2M device across multiple devices. This
+ * can be used to avoid scheduling two hardware nodes concurrently.
+ */
+void v4l2_m2m_get(struct v4l2_m2m_dev *m2m_dev);
+
+/**
+ * v4l2_m2m_put() - remove a reference to the m2m_dev structure
+ *
+ * @m2m_dev: opaque pointer to the internal data to handle M2M context
+ *
+ * Once the M2M device has no more references, v4l2_m2m_release() will be
+ * called automatically. Users of this method should never call
+ * v4l2_m2m_release() directly. See v4l2_m2m_get() for more details.
+ */
+void v4l2_m2m_put(struct v4l2_m2m_dev *m2m_dev);
+
+/**
* v4l2_m2m_ctx_init() - allocate and initialize a m2m context
*
* @m2m_dev: opaque pointer to the internal data to handle M2M context