summaryrefslogtreecommitdiff
path: root/drivers/usb/gadget/function/uvc_v4l2.c
diff options
context:
space:
mode:
authorMichael Grzeschik <m.grzeschik@pengutronix.de>2020-04-21 15:28:14 +0200
committerFelipe Balbi <balbi@kernel.org>2020-05-25 11:09:38 +0300
commit43cd0023872efbb6a86bdc03fb520de3de55c7b0 (patch)
treea021ccb119a17755c461ff41a28635f69b52a602 /drivers/usb/gadget/function/uvc_v4l2.c
parent7edd9cba9653c7d40d7baf34c0688d669207f880 (diff)
downloadlwn-43cd0023872efbb6a86bdc03fb520de3de55c7b0.tar.gz
lwn-43cd0023872efbb6a86bdc03fb520de3de55c7b0.zip
usb: gadget: uvc_video: add worker to handle the frame pumping
This patch changes the function uvc_video_pump to be a separate scheduled worker. This way the completion handler of each usb request and every direct caller of the pump has only to schedule the worker instead of doing the request handling by itself. Moving the request handling to one thread solves the locking problems between the three queueing cases in the completion handler, v4l2_qbuf and video_enable. Many drivers handle the completion handlers directly in their interrupt handlers. This patch also reduces the workload on each interrupt. Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> Signed-off-by: Felipe Balbi <balbi@kernel.org>
Diffstat (limited to 'drivers/usb/gadget/function/uvc_v4l2.c')
-rw-r--r--drivers/usb/gadget/function/uvc_v4l2.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/usb/gadget/function/uvc_v4l2.c b/drivers/usb/gadget/function/uvc_v4l2.c
index 495f0ec663ea..4ca89eab6159 100644
--- a/drivers/usb/gadget/function/uvc_v4l2.c
+++ b/drivers/usb/gadget/function/uvc_v4l2.c
@@ -169,7 +169,9 @@ uvc_v4l2_qbuf(struct file *file, void *fh, struct v4l2_buffer *b)
if (ret < 0)
return ret;
- return uvcg_video_pump(video);
+ schedule_work(&video->pump);
+
+ return ret;
}
static int