Re: [PATCH 1/1] media: uvcvideo: Support devices that report an OT as an entity source

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

 



Hi Hans,

On Wed, Mar 31, 2021 at 12:38:07PM +0200, Hans de Goede wrote:
> On 3/8/21 11:31 AM, Hans de Goede wrote:
> > From: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> > 
> > Some devices reference an output terminal as the source of extension
> > units. This is incorrect, as output terminals only have an input pin,
> > and thus can't be connected to any entity in the forward direction. The
> > resulting topology would cause issues when registering the media
> > controller graph. To avoid this problem, connect the extension unit to
> > the source of the output terminal instead.
> > 
> > While at it, and while no device has been reported to be affected by
> > this issue, also handle forward scans where two output terminals would
> > be connected together, and skip the terminals found through such an
> > invalid connection.
> > 
> > Reported-and-tested-by: John Nealy <jnealy3@xxxxxxxxx>
> > Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> > Signed-off-by: Hans de Goede <hdegoede@xxxxxxxxxx>
> 
> Ping? This is a bug-fix which fixes a WARN triggering, causing many
> users to see a backtrace in their kernel-logs and reporting bugs about this:
> 
> https://bugzilla.redhat.com/buglist.cgi?quicksearch=mc-entity.c
> 
> Currently shows 12 open bugs for this and this is not counting all the
> ones which have already been triaged and matched as dups.
> 
> As such it would be really good if we can get this merged and on
> its way to 5.12-rc# as a fix for 5.12 (and to be backported to the
> stable series).

The patch is included in "[GIT PULL FOR v5.13] Miscellaneous changes". I
have no personal issue with it being merged in v5.12-rc, but technically
it's not a regression fix, is it ? I'll let Mauro decide what works best
for him.

> > ---
> >  drivers/media/usb/uvc/uvc_driver.c | 32 ++++++++++++++++++++++++++++++
> >  1 file changed, 32 insertions(+)
> > 
> > diff --git a/drivers/media/usb/uvc/uvc_driver.c b/drivers/media/usb/uvc/uvc_driver.c
> > index 30ef2a3110f7..8df58f04dac6 100644
> > --- a/drivers/media/usb/uvc/uvc_driver.c
> > +++ b/drivers/media/usb/uvc/uvc_driver.c
> > @@ -1716,6 +1716,31 @@ static int uvc_scan_chain_forward(struct uvc_video_chain *chain,
> >  				return -EINVAL;
> >  			}
> >  
> > +			/*
> > +			 * Some devices reference an output terminal as the
> > +			 * source of extension units. This is incorrect, as
> > +			 * output terminals only have an input pin, and thus
> > +			 * can't be connected to any entity in the forward
> > +			 * direction. The resulting topology would cause issues
> > +			 * when registering the media controller graph. To
> > +			 * avoid this problem, connect the extension unit to
> > +			 * the source of the output terminal instead.
> > +			 */
> > +			if (UVC_ENTITY_IS_OTERM(entity)) {
> > +				struct uvc_entity *source;
> > +
> > +				source = uvc_entity_by_id(chain->dev,
> > +							  entity->baSourceID[0]);
> > +				if (!source) {
> > +					uvc_dbg(chain->dev, DESCR,
> > +						"Can't connect extension unit %u in chain\n",
> > +						forward->id);
> > +					break;
> > +				}
> > +
> > +				forward->baSourceID[0] = source->id;
> > +			}
> > +
> >  			list_add_tail(&forward->chain, &chain->entities);
> >  			if (!found)
> >  				uvc_dbg_cont(PROBE, " (->");
> > @@ -1735,6 +1760,13 @@ static int uvc_scan_chain_forward(struct uvc_video_chain *chain,
> >  				return -EINVAL;
> >  			}
> >  
> > +			if (UVC_ENTITY_IS_OTERM(entity)) {
> > +				uvc_dbg(chain->dev, DESCR,
> > +					"Unsupported connection between output terminals %u and %u\n",
> > +					entity->id, forward->id);
> > +				break;
> > +			}
> > +
> >  			list_add_tail(&forward->chain, &chain->entities);
> >  			if (!found)
> >  				uvc_dbg_cont(PROBE, " (->");

-- 
Regards,

Laurent Pinchart



[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