Commit 6d219986 authored by Sergey Senozhatsky's avatar Sergey Senozhatsky Committed by Mauro Carvalho Chehab

media: videobuf2: add cache management members

Extend vb2_buffer and vb2_queue structs with cache management
members.

V4L2 UAPI already contains two buffer flags which user-space,
supposedly, can use to control buffer cache sync:

- V4L2_BUF_FLAG_NO_CACHE_INVALIDATE
- V4L2_BUF_FLAG_NO_CACHE_CLEAN

None of these, however, do anything at the moment. This patch
set is intended to change it.

Since user-space cache management hints are supposed to be
implemented on a per-buffer basis we need to extend vb2_buffer
struct with two new members ->need_cache_sync_on_prepare and
->need_cache_sync_on_finish, which will store corresponding
user-space hints.

In order to preserve the existing behaviour, user-space cache
managements flags will be handled only by those drivers that
permit user-space cache hints. That's the purpose of vb2_queue
->allow_cache_hints member. Driver must set ->allow_cache_hints
during queue initialisation to enable cache management hints
mechanism.
Signed-off-by: default avatarSergey Senozhatsky <senozhatsky@chromium.org>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+huawei@kernel.org>
parent 830e87ed
...@@ -263,6 +263,10 @@ struct vb2_buffer { ...@@ -263,6 +263,10 @@ struct vb2_buffer {
* after the 'buf_finish' op is called. * after the 'buf_finish' op is called.
* copied_timestamp: the timestamp of this capture buffer was copied * copied_timestamp: the timestamp of this capture buffer was copied
* from an output buffer. * from an output buffer.
* need_cache_sync_on_prepare: when set buffer's ->prepare() function
* performs cache sync/invalidation.
* need_cache_sync_on_finish: when set buffer's ->finish() function
* performs cache sync/invalidation.
* queued_entry: entry on the queued buffers list, which holds * queued_entry: entry on the queued buffers list, which holds
* all buffers queued from userspace * all buffers queued from userspace
* done_entry: entry on the list that stores all buffers ready * done_entry: entry on the list that stores all buffers ready
...@@ -273,6 +277,8 @@ struct vb2_buffer { ...@@ -273,6 +277,8 @@ struct vb2_buffer {
unsigned int synced:1; unsigned int synced:1;
unsigned int prepared:1; unsigned int prepared:1;
unsigned int copied_timestamp:1; unsigned int copied_timestamp:1;
unsigned int need_cache_sync_on_prepare:1;
unsigned int need_cache_sync_on_finish:1;
struct vb2_plane planes[VB2_MAX_PLANES]; struct vb2_plane planes[VB2_MAX_PLANES];
struct list_head queued_entry; struct list_head queued_entry;
...@@ -491,6 +497,9 @@ struct vb2_buf_ops { ...@@ -491,6 +497,9 @@ struct vb2_buf_ops {
* @uses_requests: requests are used for this queue. Set to 1 the first time * @uses_requests: requests are used for this queue. Set to 1 the first time
* a request is queued. Set to 0 when the queue is canceled. * a request is queued. Set to 0 when the queue is canceled.
* If this is 1, then you cannot queue buffers directly. * If this is 1, then you cannot queue buffers directly.
* @allow_cache_hints: when set user-space can pass cache management hints in
* order to skip cache flush/invalidation on ->prepare() or/and
* ->finish().
* @lock: pointer to a mutex that protects the &struct vb2_queue. The * @lock: pointer to a mutex that protects the &struct vb2_queue. The
* driver can set this to a mutex to let the v4l2 core serialize * driver can set this to a mutex to let the v4l2 core serialize
* the queuing ioctls. If the driver wants to handle locking * the queuing ioctls. If the driver wants to handle locking
...@@ -567,6 +576,7 @@ struct vb2_queue { ...@@ -567,6 +576,7 @@ struct vb2_queue {
unsigned int requires_requests:1; unsigned int requires_requests:1;
unsigned int uses_qbuf:1; unsigned int uses_qbuf:1;
unsigned int uses_requests:1; unsigned int uses_requests:1;
unsigned int allow_cache_hints:1;
struct mutex *lock; struct mutex *lock;
void *owner; void *owner;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment