mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 12:17:12 +09:00
Revert "usb: gadget: uvc: wait for req complete before free req"
This reverts commit b37ab4ccd0.
Change-Id: I42a80e2d9c7c5691229c2d25c575ef246b6499dd
Signed-off-by: William Wu <william.wu@rock-chips.com>
This commit is contained in:
@@ -82,9 +82,6 @@ struct uvc_request {
|
||||
struct sg_table sgt;
|
||||
u8 header[UVCG_REQUEST_HEADER_LEN];
|
||||
struct uvc_buffer *last_buf;
|
||||
#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
|
||||
struct completion req_done;
|
||||
#endif
|
||||
};
|
||||
|
||||
struct uvc_video {
|
||||
|
||||
@@ -33,42 +33,11 @@ static bool uvc_using_zero_copy(struct uvc_video *video)
|
||||
else
|
||||
return false;
|
||||
}
|
||||
|
||||
static void uvc_wait_req_complete(struct uvc_video *video, struct uvc_request *ureq)
|
||||
{
|
||||
unsigned long flags;
|
||||
struct usb_request *req;
|
||||
int ret;
|
||||
|
||||
spin_lock_irqsave(&video->req_lock, flags);
|
||||
|
||||
list_for_each_entry(req, &video->req_free, list) {
|
||||
if (req == ureq->req)
|
||||
break;
|
||||
}
|
||||
|
||||
if (req != ureq->req) {
|
||||
reinit_completion(&ureq->req_done);
|
||||
|
||||
spin_unlock_irqrestore(&video->req_lock, flags);
|
||||
ret = wait_for_completion_timeout(&ureq->req_done,
|
||||
msecs_to_jiffies(500));
|
||||
if (ret == 0)
|
||||
uvcg_warn(&video->uvc->func,
|
||||
"timed out waiting for req done\n");
|
||||
return;
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&video->req_lock, flags);
|
||||
}
|
||||
#else
|
||||
static inline bool uvc_using_zero_copy(struct uvc_video *video)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
static inline void uvc_wait_req_complete(struct uvc_video *video, struct uvc_request *ureq)
|
||||
{ }
|
||||
#endif
|
||||
|
||||
/* --------------------------------------------------------------------------
|
||||
@@ -358,9 +327,6 @@ uvc_video_complete(struct usb_ep *ep, struct usb_request *req)
|
||||
|
||||
spin_lock_irqsave(&video->req_lock, flags);
|
||||
list_add_tail(&req->list, &video->req_free);
|
||||
#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
|
||||
complete(&ureq->req_done);
|
||||
#endif
|
||||
spin_unlock_irqrestore(&video->req_lock, flags);
|
||||
|
||||
if (uvc->state == UVC_STATE_STREAMING)
|
||||
@@ -377,7 +343,6 @@ uvc_video_free_requests(struct uvc_video *video)
|
||||
sg_free_table(&video->ureq[i].sgt);
|
||||
|
||||
if (video->ureq[i].req) {
|
||||
uvc_wait_req_complete(video, &video->ureq[i]);
|
||||
usb_ep_free_request(video->ep, video->ureq[i].req);
|
||||
video->ureq[i].req = NULL;
|
||||
}
|
||||
@@ -435,9 +400,6 @@ uvc_video_alloc_requests(struct uvc_video *video)
|
||||
video->ureq[i].video = video;
|
||||
video->ureq[i].last_buf = NULL;
|
||||
|
||||
#if defined(CONFIG_ARCH_ROCKCHIP) && defined(CONFIG_NO_GKI)
|
||||
init_completion(&video->ureq[i].req_done);
|
||||
#endif
|
||||
list_add_tail(&video->ureq[i].req->list, &video->req_free);
|
||||
/* req_size/PAGE_SIZE + 1 for overruns and + 1 for header */
|
||||
sg_alloc_table(&video->ureq[i].sgt,
|
||||
|
||||
Reference in New Issue
Block a user