You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
usb: gadget: uvc: Implement videobuf2 .wait_prepare and .wait_finish operations
Those optional operations are used to release and reacquire the queue lock when videobuf2 needs to perform operations that sleep for a long time, such as waiting for a buffer to be complete. Implement them to avoid blocking qbuf or streamoff calls when a dqbuf is in progress. Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> Signed-off-by: Felipe Balbi <balbi@ti.com>
This commit is contained in:
committed by
Felipe Balbi
parent
81fbf101f2
commit
a2cc81d315
@@ -103,10 +103,26 @@ static void uvc_buffer_queue(struct vb2_buffer *vb)
|
|||||||
spin_unlock_irqrestore(&queue->irqlock, flags);
|
spin_unlock_irqrestore(&queue->irqlock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void uvc_wait_prepare(struct vb2_queue *vq)
|
||||||
|
{
|
||||||
|
struct uvc_video_queue *queue = vb2_get_drv_priv(vq);
|
||||||
|
|
||||||
|
mutex_unlock(&queue->mutex);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void uvc_wait_finish(struct vb2_queue *vq)
|
||||||
|
{
|
||||||
|
struct uvc_video_queue *queue = vb2_get_drv_priv(vq);
|
||||||
|
|
||||||
|
mutex_lock(&queue->mutex);
|
||||||
|
}
|
||||||
|
|
||||||
static struct vb2_ops uvc_queue_qops = {
|
static struct vb2_ops uvc_queue_qops = {
|
||||||
.queue_setup = uvc_queue_setup,
|
.queue_setup = uvc_queue_setup,
|
||||||
.buf_prepare = uvc_buffer_prepare,
|
.buf_prepare = uvc_buffer_prepare,
|
||||||
.buf_queue = uvc_buffer_queue,
|
.buf_queue = uvc_buffer_queue,
|
||||||
|
.wait_prepare = uvc_wait_prepare,
|
||||||
|
.wait_finish = uvc_wait_finish,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int uvc_queue_init(struct uvc_video_queue *queue,
|
static int uvc_queue_init(struct uvc_video_queue *queue,
|
||||||
|
|||||||
Reference in New Issue
Block a user