[prev in list] [next in list] [prev in thread] [next in thread]
List: linux-media
Subject: Re: [PATCH 1/1] media: uvcvideo: Support devices that report an OT as an entity source
From: Hans de Goede <hdegoede () redhat ! com>
Date: 2021-03-31 11:37:26
Message-ID: 7000176e-4819-b8f2-2152-ec1af4d4164d () redhat ! com
[Download RAW message or body]
Hi,
On 3/31/21 1:03 PM, Laurent Pinchart wrote:
> 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@ideasonboard.com>
>>>
>>> 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@yahoo.com>
>>> Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
>>> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
>>
>> 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".
Ah I missed that.
> 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.
It is true that this is not a regression-fix but it is a bug-fix and for
a bug which users are actively hitting.
Regards,
Hans
>
>>> ---
>>> 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, " (->");
>
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic