Re: [PATCH v13 13/34] media: drivers: use video_device_pipeline_alloc_start()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 29/08/2022 20:00, Laurent Pinchart wrote:
Hi Tomi,

Thank you for the patch.

On Wed, Aug 10, 2022 at 03:11:01PM +0300, Tomi Valkeinen wrote:
Use video_device_pipeline_alloc_start() instead of manually
allocating/managing the media pipeline storage.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
---
  drivers/media/platform/renesas/rcar-vin/rcar-dma.c | 14 +-------------
  drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c |  2 +-
  .../media/platform/sunxi/sun6i-csi/sun6i_video.c   |  2 +-
  drivers/media/platform/ti/cal/cal-video.c          |  2 +-
  drivers/media/platform/ti/cal/cal.h                |  1 -
  5 files changed, 4 insertions(+), 17 deletions(-)

diff --git a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c
index 548067f19576..884875600231 100644
--- a/drivers/media/platform/renesas/rcar-vin/rcar-dma.c
+++ b/drivers/media/platform/renesas/rcar-vin/rcar-dma.c
@@ -1244,8 +1244,6 @@ static int rvin_mc_validate_format(struct rvin_dev *vin, struct v4l2_subdev *sd,
static int rvin_set_stream(struct rvin_dev *vin, int on)
  {
-	struct media_pipeline *pipe;
-	struct media_device *mdev;
  	struct v4l2_subdev *sd;
  	struct media_pad *pad;
  	int ret;
@@ -1273,17 +1271,7 @@ static int rvin_set_stream(struct rvin_dev *vin, int on)
  	if (ret)
  		return ret;
- /*
-	 * The graph lock needs to be taken to protect concurrent
-	 * starts of multiple VIN instances as they might share
-	 * a common subdevice down the line and then should use
-	 * the same pipe.
-	 */
-	mdev = vin->vdev.entity.graph_obj.mdev;
-	mutex_lock(&mdev->graph_mutex);
-	pipe = media_entity_pipeline(&sd->entity) ? : &vin->vdev.pipe;
-	ret = __video_device_pipeline_start(&vin->vdev, pipe);
-	mutex_unlock(&mdev->graph_mutex);
+	ret = video_device_pipeline_alloc_start(&vin->vdev);

This doesn't look right, it will use different pipeline instances for
difference video devices, that's a change in behaviour.

I hope not, but it's a bit difficult to be sure without having the board and testing.

Afaics, the previous code uses the existing pipeline if such exists in the first subdev (i.e. if media_pipeline_start has been called earlier for another vdev), or if not, uses pipeline specific to the vdev.

This behavior should match the new one, although the operation underneath is slightly different.

It's perhaps the name, video_device_pipeline_alloc_start, that confuses. It doesn't indicate that it possibly uses an existing pipeline. But I don't have any good idea for a better name. video_device_pipeline_find_or_alloc_start? =) Well, it's not really "finding" anything either...

  	if (ret)
  		return ret;
diff --git a/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c b/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c
index 17ad9a3caaa5..a3e826a755fc 100644
--- a/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c
+++ b/drivers/media/platform/sunxi/sun4i-csi/sun4i_dma.c
@@ -266,7 +266,7 @@ static int sun4i_csi_start_streaming(struct vb2_queue *vq, unsigned int count)
  		goto err_clear_dma_queue;
  	}
- ret = video_device_pipeline_start(&csi->vdev, &csi->vdev.pipe);

What ? There is a pipe embedded in video_device ? Oh my, I didn't
realize how messed up the V4L2 core had become :-(

That's what the current Renesas driver earlier in this patch also uses. Didn't you write that code? =)

 Tomi



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux