diff options
Diffstat (limited to 'target/linux/bcm27xx/patches-5.4/950-0938-staging-vc04_services-codec-Fix-incorrect-buffer-cle.patch')
-rw-r--r-- | target/linux/bcm27xx/patches-5.4/950-0938-staging-vc04_services-codec-Fix-incorrect-buffer-cle.patch | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/target/linux/bcm27xx/patches-5.4/950-0938-staging-vc04_services-codec-Fix-incorrect-buffer-cle.patch b/target/linux/bcm27xx/patches-5.4/950-0938-staging-vc04_services-codec-Fix-incorrect-buffer-cle.patch new file mode 100644 index 0000000000..14736dc2dc --- /dev/null +++ b/target/linux/bcm27xx/patches-5.4/950-0938-staging-vc04_services-codec-Fix-incorrect-buffer-cle.patch @@ -0,0 +1,52 @@ +From 84fa15b87a5f938c064ee2d9fca43248865ffbec Mon Sep 17 00:00:00 2001 +From: Dave Stevenson <dave.stevenson@raspberrypi.com> +Date: Thu, 13 Aug 2020 16:58:18 +0100 +Subject: [PATCH] staging: vc04_services: codec: Fix incorrect buffer + cleanup + +The allocated input and output buffers are initialised in +buf_init and should only be cleared up in buf_cleanup. +stop_streaming was (incorrectly) cleaning up the buffers to +avoid an issue in videobuf2 that had been fixed by the orphaned +buffer support. + +Remove the erroneous cleanup. + +Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com> +--- + .../bcm2835-codec/bcm2835-v4l2-codec.c | 17 +---------------- + 1 file changed, 1 insertion(+), 16 deletions(-) + +--- a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c ++++ b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c +@@ -2320,10 +2320,7 @@ static void bcm2835_codec_stop_streaming + struct bcm2835_codec_q_data *q_data = get_q_data(ctx, q->type); + struct vchiq_mmal_port *port = get_port_data(ctx, q->type); + struct vb2_v4l2_buffer *vbuf; +- struct vb2_v4l2_buffer *vb2; +- struct v4l2_m2m_buffer *m2m; +- struct m2m_mmal_buffer *buf; +- int ret, i; ++ int ret; + + v4l2_dbg(1, debug, &ctx->dev->v4l2_dev, "%s: type: %d - return buffers\n", + __func__, q->type); +@@ -2363,18 +2360,6 @@ static void bcm2835_codec_stop_streaming + } + } + +- /* +- * Release the VCSM handle here as otherwise REQBUFS(0) aborts because +- * someone is using the dmabuf before giving the driver a chance to do +- * anything about it. +- */ +- for (i = 0; i < q->num_buffers; i++) { +- vb2 = to_vb2_v4l2_buffer(q->bufs[i]); +- m2m = container_of(vb2, struct v4l2_m2m_buffer, vb); +- buf = container_of(m2m, struct m2m_mmal_buffer, m2m); +- +- bcm2835_codec_mmal_buf_cleanup(&buf->mmal); +- } + + /* If both ports disabled, then disable the component */ + if (!ctx->component->input[0].enabled && |