| .. | .. |
|---|
| 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; |
|---|