.. | .. |
---|
249 | 249 | spin_unlock_irqrestore(&video->req_lock, flags); |
---|
250 | 250 | |
---|
251 | 251 | if (uvc->state == UVC_STATE_STREAMING) |
---|
252 | | - schedule_work(&video->pump); |
---|
| 252 | + queue_work(video->async_wq, &video->pump); |
---|
253 | 253 | } |
---|
254 | 254 | |
---|
255 | 255 | static int |
---|
.. | .. |
---|
446 | 446 | } else |
---|
447 | 447 | video->encode = uvc_video_encode_isoc; |
---|
448 | 448 | |
---|
449 | | - schedule_work(&video->pump); |
---|
| 449 | + queue_work(video->async_wq, &video->pump); |
---|
450 | 450 | |
---|
451 | 451 | return ret; |
---|
452 | 452 | } |
---|
.. | .. |
---|
460 | 460 | spin_lock_init(&video->req_lock); |
---|
461 | 461 | INIT_WORK(&video->pump, uvcg_video_pump); |
---|
462 | 462 | |
---|
| 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 | + |
---|
463 | 468 | video->uvc = uvc; |
---|
464 | 469 | video->fcc = V4L2_PIX_FMT_YUYV; |
---|
465 | 470 | video->bpp = 16; |
---|