hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/usb/gadget/function/uvc_video.c
....@@ -249,7 +249,7 @@
249249 spin_unlock_irqrestore(&video->req_lock, flags);
250250
251251 if (uvc->state == UVC_STATE_STREAMING)
252
- schedule_work(&video->pump);
252
+ queue_work(video->async_wq, &video->pump);
253253 }
254254
255255 static int
....@@ -446,7 +446,7 @@
446446 } else
447447 video->encode = uvc_video_encode_isoc;
448448
449
- schedule_work(&video->pump);
449
+ queue_work(video->async_wq, &video->pump);
450450
451451 return ret;
452452 }
....@@ -460,6 +460,11 @@
460460 spin_lock_init(&video->req_lock);
461461 INIT_WORK(&video->pump, uvcg_video_pump);
462462
463
+ /* Allocate a work queue for asynchronous video pump handler. */
464
+ video->async_wq = alloc_workqueue("uvcgadget", WQ_UNBOUND | WQ_HIGHPRI, 0);
465
+ if (!video->async_wq)
466
+ return -EINVAL;
467
+
463468 video->uvc = uvc;
464469 video->fcc = V4L2_PIX_FMT_YUYV;
465470 video->bpp = 16;