Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1628895

Re: [PATCH 2/2] [media] uvcvideo: Kill video URBs on disconnect

From Daniel Axtens <dja@axtens.net>
Newsgroups linux.kernel
Subject Re: [PATCH 2/2] [media] uvcvideo: Kill video URBs on disconnect
Date 2017-04-23 02:50 +0200
Message-ID <tzdSV-1nr-1@gated-at.bofh.it> (permalink)
References <txaFP-70u-3@gated-at.bofh.it> <txaFP-70u-1@gated-at.bofh.it> <txegq-Gs-13@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


Hi Laurent,

Apologies for takig so long to get back to you.

> I assume that the error message is caused by a race between disconnection and 
> URB handling. When the device is disconnected I believe the USB core will 
> cancel all in-progress URBs (I'm not very familiar with that part of the USB 
> core anymore, so please don't consider this or any further related statement 
> as true without double-checking), resulting in the URB completion handler 
> being called with an error status. The completion handler should then avoid 
> resubmitting the URB. However, if the completion handler is in progress when 
> the device is disconnected, it won't notice that the device got disconnected, 
> and will try to resubmit the URB.
>
> I'm not sure to see how this patch will fix the problem. If the URB completion 
> handler is in progress when the device is being disconnected, won't it call 
> usb_submit_urb() regardless of whether you call usb_kill_urb() in the 
> disconnect handler, resulting in an error message being printed ?

You're completely right - I misunderstood the flow of the
function. Fixing this would require a different approach and would be
more invasive. Given that this does not cause anything more annoying
than some log messages, I will leave it for now.

Regards,
Daniel

>
>> ---
>>  drivers/media/usb/uvc/uvc_driver.c | 2 ++
>>  1 file changed, 2 insertions(+)
>> 
>> diff --git a/drivers/media/usb/uvc/uvc_driver.c
>> b/drivers/media/usb/uvc/uvc_driver.c index 2390592f78e0..647e3d8a1256
>> 100644
>> --- a/drivers/media/usb/uvc/uvc_driver.c
>> +++ b/drivers/media/usb/uvc/uvc_driver.c
>> @@ -1877,6 +1877,8 @@ static void uvc_unregister_video(struct uvc_device
>> *dev) if (!video_is_registered(&stream->vdev))
>>  			continue;
>> 
>> +		uvc_video_enable(stream, 0);
>> +
>>  		video_unregister_device(&stream->vdev);
>> 
>>  		uvc_debugfs_cleanup_stream(stream);
>
> -- 
> Regards,
>
> Laurent Pinchart

Back to linux.kernel | Previous | NextPrevious in thread | Find similar | Unroll thread


Thread

[PATCH 2/2] [media] uvcvideo: Kill video URBs on disconnect Daniel Axtens <dja@axtens.net> - 2017-04-17 11:00 +0200
  Re: [PATCH 2/2] [media] uvcvideo: Kill video URBs on disconnect Laurent Pinchart <laurent.pinchart@ideasonboard.com> - 2017-04-17 14:50 +0200
    Re: [PATCH 2/2] [media] uvcvideo: Kill video URBs on disconnect Daniel Axtens <dja@axtens.net> - 2017-04-23 02:50 +0200

csiph-web