UPSTREAM: usb: gadget: uvc: only schedule stream in streaming state
This patch ensures that the video pump thread will only be scheduled if the uvc is really in streaming state. This way the worker will not have to run on an empty queue. Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Paul Elder <paul.elder@ideasonboard.com> Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> Link: https://lore.kernel.org/r/20211017215017.18392-5-m.grzeschik@pengutronix.de Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Bug: 229140375 (cherry picked from commit 5fc49d8bee73648a706f5892663f5bd728ab07ea) Signed-off-by: Dan Vacura <w36195@motorola.com> Change-Id: I5724e6c41a4b298f42d4009bdfe2f0232ae16517 (cherry picked from commit 6692312df6dc9254e107e12c352bf793382b2361)
This commit is contained in:
committed by
Matthias Männich
parent
75b799c801
commit
1b5de9bdc4
@@ -169,7 +169,8 @@ uvc_v4l2_qbuf(struct file *file, void *fh, struct v4l2_buffer *b)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
schedule_work(&video->pump);
|
||||
if (uvc->state == UVC_STATE_STREAMING)
|
||||
schedule_work(&video->pump);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -213,6 +213,7 @@ uvc_video_complete(struct usb_ep *ep, struct usb_request *req)
|
||||
struct uvc_request *ureq = req->context;
|
||||
struct uvc_video *video = ureq->video;
|
||||
struct uvc_video_queue *queue = &video->queue;
|
||||
struct uvc_device *uvc = video->uvc;
|
||||
unsigned long flags;
|
||||
|
||||
switch (req->status) {
|
||||
@@ -235,7 +236,8 @@ uvc_video_complete(struct usb_ep *ep, struct usb_request *req)
|
||||
list_add_tail(&req->list, &video->req_free);
|
||||
spin_unlock_irqrestore(&video->req_lock, flags);
|
||||
|
||||
schedule_work(&video->pump);
|
||||
if (uvc->state == UVC_STATE_STREAMING)
|
||||
schedule_work(&video->pump);
|
||||
}
|
||||
|
||||
static int
|
||||
|
||||
Reference in New Issue
Block a user