[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20170417085240.12930-2-dja@axtens.net>
Date: Mon, 17 Apr 2017 18:52:40 +1000
From: Daniel Axtens <dja@...ens.net>
To: linux-media@...r.kernel.org, linux-kernel@...r.kernel.org
Cc: Daniel Axtens <dja@...ens.net>,
Laurent Pinchart <laurent.pinchart@...asonboard.com>
Subject: [PATCH 2/2] [media] uvcvideo: Kill video URBs on disconnect
When an in-use webcam is disconnected, I noticed the following
messages:
uvcvideo: Failed to resubmit video URB (-19).
-19 is -ENODEV, which does make sense given that the device has
disappeared.
We could put a case for -ENODEV like we have with -ENOENT, -ECONNRESET
and -ESHUTDOWN, but the usb_unlink_urb() API documentation says that
'The disconnect function should synchronize with a driver's I/O
routines to insure that all URB-related activity has completed before
it returns.' So we should make an effort to proactively kill URBs in
the disconnect path instead.
Call uvc_enable_video() (specifying 0 to disable) in the disconnect
path, which kills and frees URBs.
Cc: Laurent Pinchart <laurent.pinchart@...asonboard.com>
Signed-off-by: Daniel Axtens <dja@...ens.net>
---
Before this patch, yavta -c hangs when a camera is disconnected, but
with this patch it exits immediately after the camera is
disconnected. I'm not sure if this is acceptable - Laurent?
---
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);
--
2.9.3
Powered by blists - more mailing lists