FAILED: patch "[PATCH] media: ipu3-cio2: Serialise access to pad format" failed to apply to 4.19-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.19-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 55a6c6b2be3d6670bf5772364d8208bd8dc17da4 Mon Sep 17 00:00:00 2001
From: Sakari Ailus <[email protected]>
Date: Thu, 8 Oct 2020 21:29:38 +0200
Subject: [PATCH] media: ipu3-cio2: Serialise access to pad format
Pad format can be accessed from user space. Serialise access to it.
Fixes c2a6a07afe4a ("media: intel-ipu3: cio2: add new MIPI-CSI2 driver")
Signed-off-by Sakari Ailus <[email protected]>
Reviewed-by Laurent Pinchart <[email protected]>
Reviewed-by Bingbu Cao <[email protected]>
Reviewed-by Andy Shevchenko <[email protected]>
Cc [email protected] # v4.16 and up
Signed-off-by Mauro Carvalho Chehab <[email protected]>
drivers/media/pci/intel/ipu3/ipu3-cio2.c +11 -0
@@ -1233,11 +1233,15 @@ static int cio2_subdev_get_fmt(struct v4l2_subdev *sd, { struct cio2_queue *q = container_of(sd, struct cio2_queue, subdev); +mutex_lock (&q->subdev_lock); +if (fmt->which ==V4L2_SUBDEV_FORMAT_TRY ) fmt->format = *v4l2_subdev_get_try_format (sd, cfg, fmt->pad);else fmt->format = q->subdev_fmt; +mutex_unlock (&q->subdev_lock); +return 0 ; }
@@ -1261,6 +1265,8 @@ static int cio2_subdev_set_fmt(struct v4l2_subdev *sd,if (fmt->pad ==CIO2_PAD_SOURCE )return cio2_subdev_get_fmt (sd, cfg, fmt); +mutex_lock (&q->subdev_lock); +if (fmt->which ==V4L2_SUBDEV_FORMAT_TRY ) { *v4l2_subdev_get_try_format (sd, cfg, fmt->pad) = fmt->format; }else {
@@ -1271,6 +1277,8 @@ static int cio2_subdev_set_fmt(struct v4l2_subdev *sd, fmt->format = q->subdev_fmt; } +mutex_unlock (&q->subdev_lock); +return 0 ; }
@@ -1529,6 +1537,7 @@ static int cio2_queue_init(struct cio2_device *cio2, struct cio2_queue *q)/* Initialize miscellaneous variables */ mutex_init (&q->lock); +mutex_init (&q->subdev_lock);/* Initialize formats to default values */ fmt = &q->subdev_fmt;
@@ -1645,6 +1654,7 @@ static int cio2_queue_init(struct cio2_device *cio2, struct cio2_queue *q) fail_subdev_media_entity:cio2_fbpt_exit (q, &cio2->pci_dev->dev); fail_fbpt: +mutex_destroy (&q->subdev_lock);mutex_destroy (&q->lock);return r;
@@ -1657,6 +1667,7 @@ static void cio2_queue_exit(struct cio2_device *cio2, struct cio2_queue *q)v4l2_device_unregister_subdev (&q->subdev);media_entity_cleanup (&q->subdev.entity);cio2_fbpt_exit (q, &cio2->pci_dev->dev); +mutex_destroy (&q->subdev_lock);mutex_destroy (&q->lock); }
drivers/media/pci/intel/ipu3/ipu3-cio2.h +1 -0
@@ -335,6 +335,7 @@ struct cio2_queue {/* Subdev, /dev/v4l-subdevX */ struct v4l2_subdev subdev; +struct mutex subdev_lock;/* Serialise acces to subdev_fmt field */ struct media_pad subdev_pads[CIO2_PADS ];struct v4l2_mbus_framefmt subdev_fmt;atomic_t frame_sequence;