lkml.org 
[lkml]   [2018]   [Apr]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v2 03/10] videobuf2-core: Add helper to get buffer private data from media request
    Date
    When calling media operation driver callbacks related to media requests,
    only a pointer to the request itself is provided, which is insufficient
    to retrieve the driver's context. Since the driver context is usually
    set as vb2 queue private data and given that the core can determine
    which objects attached to the request are buffers, it is possible to
    extract the associated private data for the first buffer found.

    This is required in order to access the current m2m context from m2m
    drivers' private data in the context of media request operation
    callbacks. More specifically, this allows scheduling m2m device runs
    from the newly-introduced request complete operation.

    Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
    ---
    drivers/media/common/videobuf2/videobuf2-core.c | 15 +++++++++++++++
    include/media/videobuf2-core.h | 1 +
    2 files changed, 16 insertions(+)

    diff --git a/drivers/media/common/videobuf2/videobuf2-core.c b/drivers/media/common/videobuf2/videobuf2-core.c
    index 13c9d9e243dd..6fa46bfc620f 100644
    --- a/drivers/media/common/videobuf2/videobuf2-core.c
    +++ b/drivers/media/common/videobuf2/videobuf2-core.c
    @@ -1351,6 +1351,21 @@ bool vb2_core_request_has_buffers(struct media_request *req)
    }
    EXPORT_SYMBOL_GPL(vb2_core_request_has_buffers);

    +void *vb2_core_request_find_buffer_priv(struct media_request *req)
    +{
    + struct media_request_object *obj;
    + struct vb2_buffer *vb;
    +
    + obj = media_request_object_find(req, &vb2_core_req_ops, NULL);
    + if (!obj)
    + return NULL;
    +
    + vb = container_of(obj, struct vb2_buffer, req_obj);
    +
    + return vb2_get_drv_priv(vb->vb2_queue);
    +}
    +EXPORT_SYMBOL_GPL(vb2_core_request_find_buffer_priv);
    +
    int vb2_core_prepare_buf(struct vb2_queue *q, unsigned int index, void *pb,
    struct media_request *req)
    {
    diff --git a/include/media/videobuf2-core.h b/include/media/videobuf2-core.h
    index 032bd1bec555..65c0cf6afb55 100644
    --- a/include/media/videobuf2-core.h
    +++ b/include/media/videobuf2-core.h
    @@ -1153,4 +1153,5 @@ int vb2_verify_memory_type(struct vb2_queue *q,
    enum vb2_memory memory, unsigned int type);

    bool vb2_core_request_has_buffers(struct media_request *req);
    +void *vb2_core_request_find_buffer_priv(struct media_request *req);
    #endif /* _MEDIA_VIDEOBUF2_CORE_H */
    --
    2.16.3
    \
     
     \ /
      Last update: 2018-04-19 17:44    [W:2.475 / U:0.020 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site