From: Dan Carpenter Date: Wed, 22 Jul 2020 13:06:51 +0000 (+0300) Subject: staging: vchiq: Fix refcounting bug in buffer_from_host() X-Git-Tag: microblaze-v5.10~120^2~38 X-Git-Url: http://git.monstr.eu/?a=commitdiff_plain;h=50b2677c4e276771a6383382929180b1589b835f;p=linux-2.6-microblaze.git 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 Link: https://lore.kernel.org/r/20200722130651.GC220681@mwanda Signed-off-by: Greg Kroah-Hartman --- 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);