summaryrefslogtreecommitdiffstats
path: root/drivers/staging/vc04_services/vchiq-mmal
diff options
context:
space:
mode:
authorDan Carpenter <dan.carpenter@oracle.com>2020-07-22 16:06:51 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-07-28 10:05:33 +0200
commit50b2677c4e276771a6383382929180b1589b835f (patch)
tree4c805cc87c250dd81b2bdce092840782140e89d3 /drivers/staging/vc04_services/vchiq-mmal
parent908e757daecf2120c3019fa630ae5d4c3cd7165b (diff)
downloadlinux-50b2677c4e276771a6383382929180b1589b835f.tar.bz2
staging: vchiq: Fix refcounting bug in buffer_from_host()
If we fail to queue the buffer then it can never be dequeued. This can lead to a forever loop in stop_streaming() when we wait for everything to finish. Fixes: 70ec64ccdaac ("staging: bcm2835-camera: Ensure all buffers are returned on disable") Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com> Link: https://lore.kernel.org/r/20200722130651.GC220681@mwanda Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/vc04_services/vchiq-mmal')
-rw-r--r--drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
index 744ceb50f7bb..e798d494f00f 100644
--- a/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/vchiq-mmal/mmal-vchiq.c
@@ -441,6 +441,8 @@ buffer_from_host(struct vchiq_mmal_instance *instance,
ret = vchiq_queue_kernel_message(instance->service_handle, &m,
sizeof(struct mmal_msg_header) +
sizeof(m.u.buffer_from_host));
+ if (ret)
+ atomic_dec(&port->buffers_with_vpu);
vchiq_release_service(instance->service_handle);