LKML Archive on lore.kernel.org
help / color / mirror / Atom feed
From: Eric Anholt <eric@anholt.net>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	devel@driverdev.osuosl.org, linux-kernel@vger.kernel.org,
	linux-rpi-kernel@lists.infradead.org,
	Stefan Wahren <stefan.wahren@i2se.com>
Cc: Eric Anholt <eric@anholt.net>,
	Dave Stevenson <dave.stevenson@raspberrypi.org>
Subject: [PATCH 06/15] staging: bcm2835-camera: Match MMAL buffer count to V4L2.
Date: Thu, 10 May 2018 12:42:10 -0700	[thread overview]
Message-ID: <20180510194220.30675-7-eric@anholt.net> (raw)
In-Reply-To: <20180510194220.30675-1-eric@anholt.net>

From: Dave Stevenson <dave.stevenson@raspberrypi.org>

For historical reasons, the number of buffers passed to the VPU over
MMAL did not match that passed from V4L2.  That is a silly situation
as the driver has to duplicate serialisation and other functions that
have already been implemented in V4L2/videobuf2.

As we had more V4L2 buffers than MMAL ones, the MMAL buffer headers
were returned to the VPU immediately on being filled, which is now
invalid.

Match the number of buffers notified in queue_setup with that used in
MMAL.  Return buffers only when we get them from V4L2.

Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.org>
Signed-off-by: Eric Anholt <eric@anholt.net>
---
 .../bcm2835-camera/bcm2835-camera.c           |  6 ++++--
 .../vc04_services/bcm2835-camera/mmal-vchiq.c | 21 +------------------
 .../vc04_services/bcm2835-camera/mmal-vchiq.h |  4 ----
 3 files changed, 5 insertions(+), 26 deletions(-)

diff --git a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
index dc1c2775bc0b..8553b677eb08 100644
--- a/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
+++ b/drivers/staging/vc04_services/bcm2835-camera/bcm2835-camera.c
@@ -260,8 +260,10 @@ static int queue_setup(struct vb2_queue *vq,
 		return -EINVAL;
 	}
 
-	if (*nbuffers < (dev->capture.port->current_buffer.num + 2))
-		*nbuffers = (dev->capture.port->current_buffer.num + 2);
+	if (*nbuffers < dev->capture.port->minimum_buffer.num)
+		*nbuffers = dev->capture.port->minimum_buffer.num;
+
+	dev->capture.port->current_buffer.num = *nbuffers;
 
 	*nplanes = 1;
 
diff --git a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
index d6950226551f..0f1961aeb223 100644
--- a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
+++ b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.c
@@ -545,7 +545,6 @@ static int port_buffer_from_host(struct vchiq_mmal_instance *instance,
 	/* peek buffer from queue */
 	spin_lock_irqsave(&port->slock, flags);
 	if (list_empty(&port->buffers)) {
-		port->buffer_underflow++;
 		spin_unlock_irqrestore(&port->slock, flags);
 		return -ENOSPC;
 	}
@@ -636,9 +635,6 @@ static void buffer_to_host_cb(struct vchiq_mmal_instance *instance,
 		    msg->u.buffer_from_host.payload_in_message;
 	}
 
-	/* replace the buffer header */
-	port_buffer_from_host(instance, msg_context->u.bulk.port);
-
 	/* schedule the port callback */
 	schedule_work(&msg_context->u.bulk.work);
 }
@@ -646,10 +642,6 @@ static void buffer_to_host_cb(struct vchiq_mmal_instance *instance,
 static void bulk_receive_cb(struct vchiq_mmal_instance *instance,
 			    struct mmal_msg_context *msg_context)
 {
-	/* replace the buffer header */
-	port_buffer_from_host(msg_context->u.bulk.instance,
-			      msg_context->u.bulk.port);
-
 	msg_context->u.bulk.status = 0;
 
 	/* schedule the port callback */
@@ -661,10 +653,6 @@ static void bulk_abort_cb(struct vchiq_mmal_instance *instance,
 {
 	pr_err("%s: bulk ABORTED msg_context:%p\n", __func__, msg_context);
 
-	/* replace the buffer header */
-	port_buffer_from_host(msg_context->u.bulk.instance,
-			      msg_context->u.bulk.port);
-
 	msg_context->u.bulk.status = -EINTR;
 
 	schedule_work(&msg_context->u.bulk.work);
@@ -1713,14 +1701,7 @@ int vchiq_mmal_submit_buffer(struct vchiq_mmal_instance *instance,
 	list_add_tail(&buffer->list, &port->buffers);
 	spin_unlock_irqrestore(&port->slock, flags);
 
-	/* the port previously underflowed because it was missing a
-	 * mmal_buffer which has just been added, submit that buffer
-	 * to the mmal service.
-	 */
-	if (port->buffer_underflow) {
-		port_buffer_from_host(instance, port);
-		port->buffer_underflow--;
-	}
+	port_buffer_from_host(instance, port);
 
 	return 0;
 }
diff --git a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.h b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.h
index dadf47fe1bdc..0ab9f660b822 100644
--- a/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.h
+++ b/drivers/staging/vc04_services/bcm2835-camera/mmal-vchiq.h
@@ -79,10 +79,6 @@ struct vchiq_mmal_port {
 	struct list_head buffers;
 	/* lock to serialise adding and removing buffers from list */
 	spinlock_t slock;
-	/* count of how many buffer header refils have failed because
-	 * there was no buffer to satisfy them
-	 */
-	int buffer_underflow;
 	/* callback on buffer completion */
 	vchiq_mmal_buffer_cb buffer_cb;
 	/* callback context */
-- 
2.17.0

_______________________________________________
devel mailing list
devel@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

  parent reply	other threads:[~2018-05-10 19:42 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-05-10 19:42 [PATCH 00/15] staging: bcm2835-camera probing and cleanup Eric Anholt
2018-05-10 19:42 ` [PATCH 01/15] staging/vc04_services: Register a platform device for the camera driver Eric Anholt
2018-05-10 19:42 ` [PATCH 02/15] staging/bcm2835-camera: Set ourselves up as a platform driver Eric Anholt
2018-05-10 19:42 ` [PATCH 03/15] staging: bcm2835-camera: Skip ISP pass to eliminate padding Eric Anholt
2018-05-10 19:42 ` [PATCH 04/15] staging: bcm2835-camera: Allocate context once per buffer Eric Anholt
2018-05-10 19:42 ` [PATCH 05/15] staging: bcm2835-camera: Remove bulk_mutex as it is not required Eric Anholt
2018-05-10 19:42 ` Eric Anholt [this message]
2018-05-10 19:42 ` [PATCH 07/15] staging: bcm2835-camera: Remove V4L2/MMAL buffer remapping Eric Anholt
2018-05-10 19:42 ` [PATCH 08/15] staging: bcm2835-camera: Add multiple include protection Eric Anholt
2018-05-10 19:42 ` [PATCH 09/15] staging: bcm2835-camera: Move struct vchiq_mmal_rect Eric Anholt
2018-05-10 19:42 ` [PATCH 10/15] staging: bcm2835-camera: Replace BUG_ON with return error Eric Anholt
2018-05-10 19:42 ` [PATCH 11/15] staging: bcm2835-camera: Fix comment typos Eric Anholt
2018-05-10 19:42 ` [PATCH 12/12] staging: bcm2835-camera: Fix identation of tables Eric Anholt
2018-05-10 19:57   ` Eric Anholt
2018-05-10 19:42 ` [PATCH 12/15] staging: bcm2835-camera: Fix indentation " Eric Anholt
2018-05-10 19:42 ` [PATCH 13/15] staging: bcm2835-camera: Fix warnings about string ops on v4l2 uapi Eric Anholt
2018-05-15  9:22   ` Dan Carpenter
2018-05-10 19:42 ` [PATCH 14/15] staging: bcm2835: Remove dead code related to framerate Eric Anholt
2018-05-10 19:42 ` [PATCH 15/15] staging: bcm2835: Fix mmal_port_parameter_get() signed/unsigned warnings Eric Anholt

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180510194220.30675-7-eric@anholt.net \
    --to=eric@anholt.net \
    --cc=dave.stevenson@raspberrypi.org \
    --cc=devel@driverdev.osuosl.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rpi-kernel@lists.infradead.org \
    --cc=stefan.wahren@i2se.com \
    --subject='Re: [PATCH 06/15] staging: bcm2835-camera: Match MMAL buffer count to V4L2.' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).