diff --git a/drivers/media/video/uvc/uvc_video.c b/drivers/media/video/uvc/uvc_video.c index 2dd8dc967157..2d44c1f6f126 100755 --- a/drivers/media/video/uvc/uvc_video.c +++ b/drivers/media/video/uvc/uvc_video.c @@ -843,15 +843,17 @@ static void uvc_uninit_video(struct uvc_streaming *stream, int free_buffers) if (urb == NULL) continue; - usb_kill_urb(urb); - usb_free_urb(urb); - stream->urb[i] = NULL; - /* ddl@rock-chips.com */ + /* ddl@rock-chips.com: Tasklet must be kill before kill urb in uninit */ if (stream->tasklet[i]) { tasklet_kill(stream->tasklet[i]); kfree(stream->tasklet[i]); stream->tasklet[i] = NULL; } + + usb_kill_urb(urb); + usb_free_urb(urb); + stream->urb[i] = NULL; + } if (free_buffers)