[3/4] media: pisp_be: add missing wait_prepare/finish ops
Commit Message
Without these ops the v4l2-compliance blocking wait test will fail.
These ops are required to ensure that when VIDIOC_DQBUF has to
wait for buffers to arrive, the queue lock is correctly released
and retaken. Otherwise the wait for a buffer would block all other
queue ioctls.
Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Cc: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
drivers/media/platform/raspberrypi/pisp_be/pisp_be.c | 2 ++
1 file changed, 2 insertions(+)
Comments
Hi Hans
On Mon, Sep 02, 2024 at 10:31:23AM GMT, Hans Verkuil wrote:
> Without these ops the v4l2-compliance blocking wait test will fail.
> These ops are required to ensure that when VIDIOC_DQBUF has to
> wait for buffers to arrive, the queue lock is correctly released
> and retaken. Otherwise the wait for a buffer would block all other
> queue ioctls.
>
> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
> Cc: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> Cc: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
I can confirm it fixes a previously failing test
was:
fail: v4l2-test-buffers.cpp(3050): !thread_streamoff.done
fail: v4l2-test-buffers.cpp(3078): testBlockingDQBuf(node, q)
test blocking wait: FAIL
now:
test blocking wait: OK
Acked-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
Tested-by: Jacopo Mondi <jacopo.mondi@ideasonboard.com>
> ---
> drivers/media/platform/raspberrypi/pisp_be/pisp_be.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c b/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c
> index 65ff2382cffe..7ce3be626c4a 100644
> --- a/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c
> +++ b/drivers/media/platform/raspberrypi/pisp_be/pisp_be.c
> @@ -964,6 +964,8 @@ static const struct vb2_ops pispbe_node_queue_ops = {
> .buf_queue = pispbe_node_buffer_queue,
> .start_streaming = pispbe_node_start_streaming,
> .stop_streaming = pispbe_node_stop_streaming,
> + .wait_prepare = vb2_ops_wait_prepare,
> + .wait_finish = vb2_ops_wait_finish,
> };
>
> static const struct v4l2_file_operations pispbe_fops = {
> --
> 2.43.0
>
>
@@ -964,6 +964,8 @@ static const struct vb2_ops pispbe_node_queue_ops = {
.buf_queue = pispbe_node_buffer_queue,
.start_streaming = pispbe_node_start_streaming,
.stop_streaming = pispbe_node_stop_streaming,
+ .wait_prepare = vb2_ops_wait_prepare,
+ .wait_finish = vb2_ops_wait_finish,
};
static const struct v4l2_file_operations pispbe_fops = {