FAILED: patch "[PATCH] [media] vb2: Only requeue buffers immediately once streaming" failed to apply to 4.1-stable tree
Subsystems (4)
[email protected]
maintainerThe patch below does not apply to the 4.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
Quoted 1 line
From
6d058c5643e16779ae4c001d2e893c140940e48fMon Sep 17 00:00:00 2001
From: Sakari Ailus <[email protected]>
Date: Fri, 3 Jul 2015 04:37:07 -0300
Subject: [PATCH] [media] vb2: Only requeue buffers immediately once streaming
is started
Buffers can be returned back to videobuf2 in driver's streamon handler. In this case vb2_buffer_done() with buffer state VB2_BUF_STATE_QUEUED will cause the driver's buf_queue vb2 operation to be called, queueing the same buffer again only to be returned to videobuf2 using vb2_buffer_done() and so on.
Add a new buffer state VB2_BUF_STATE_REQUEUEING which, when used as the state argument to vb2_buffer_done(), will result in buffers queued to the driver. Using VB2_BUF_STATE_QUEUED will leave the buffer to videobuf2, as it was before "[media] vb2: allow requeuing buffers while streaming".
[[email protected]: fix warning: enumeration value 'VB2_BUF_STATE_REQUEUEING' not handled in switch]
drivers/media/pci/cobalt/cobalt-irq.c +1 -1
@@ -139,7 +139,7 @@ done:also know about dropped frames. */ cb->vb.v4l2_buf.sequence = s->sequence++;vb2_buffer_done (&cb->vb, (skip || s->unstable_frame) ? -VB2_BUF_STATE_QUEUED :VB2_BUF_STATE_DONE ); +VB2_BUF_STATE_REQUEUEING :VB2_BUF_STATE_DONE ); }irqreturn_t cobalt_irq_handler (int irq,void *dev_id)
drivers/media/v4l2-core/videobuf2-core.c +18 -8
@@ -715,6 +715,7 @@ static void __fill_v4l2_buffer(struct vb2_buffer *vb, struct v4l2_buffer *b)break ;case VB2_BUF_STATE_PREPARING :case VB2_BUF_STATE_DEQUEUED : +case VB2_BUF_STATE_REQUEUEING :/* nothing */ break ; }
@@ -1182,7 +1183,8 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)if (WARN_ON (state !=VB2_BUF_STATE_DONE && state !=VB2_BUF_STATE_ERROR && - state !=VB2_BUF_STATE_QUEUED )) + state !=VB2_BUF_STATE_QUEUED && + state !=VB2_BUF_STATE_REQUEUEING )) state =VB2_BUF_STATE_ERROR ;#ifdef CONFIG_VIDEO_ADV_DEBUG
@@ -1199,22 +1201,30 @@ void vb2_buffer_done(struct vb2_buffer *vb, enum vb2_buffer_state state)for (plane =0 ; plane < vb->num_planes; ++plane)call_void_memop (vb, finish, vb->planes[plane].mem_priv); -/* Add the buffer to the done buffers list */ spin_lock_irqsave (&q->done_lock, flags); - vb->state = state; -if (state !=VB2_BUF_STATE_QUEUED ) +if (state ==VB2_BUF_STATE_QUEUED || + state ==VB2_BUF_STATE_REQUEUEING ) { + vb->state =VB2_BUF_STATE_QUEUED ; + }else { +/* Add the buffer to the done buffers list */ list_add_tail (&vb->done_entry, &q->done_list); + vb->state = state; + }atomic_dec (&q->owned_by_drv_count);spin_unlock_irqrestore (&q->done_lock, flags); -if (state ==VB2_BUF_STATE_QUEUED ) { +switch (state) { +case VB2_BUF_STATE_QUEUED : +return ; +case VB2_BUF_STATE_REQUEUEING :if (q->start_streaming_called)__enqueue_in_driver (vb);return ; +default : +/* Inform any processes that may be waiting for buffers */ +wake_up (&q->done_wq); +break ; } - -/* Inform any processes that may be waiting for buffers */ -wake_up (&q->done_wq); }EXPORT_SYMBOL_GPL (vb2_buffer_done);
include/media/videobuf2-core.h +2 -0
@@ -139,6 +139,7 @@ enum vb2_io_modes {* @VB2_BUF_STATE_PREPARING: buffer is being prepared in videobuf * @VB2_BUF_STATE_PREPARED: buffer prepared in videobuf and by the driver * @VB2_BUF_STATE_QUEUED: buffer queued in videobuf, but not in driver +* @VB2_BUF_STATE_REQUEUEING: re-queue a buffer to the driver * @VB2_BUF_STATE_ACTIVE: buffer queued in driver and possibly used * in a hardware operation * @VB2_BUF_STATE_DONE: buffer returned from driver to videobuf, but
@@ -152,6 +153,7 @@ enum vb2_buffer_state {VB2_BUF_STATE_PREPARING ,VB2_BUF_STATE_PREPARED ,VB2_BUF_STATE_QUEUED , +VB2_BUF_STATE_REQUEUEING ,VB2_BUF_STATE_ACTIVE ,VB2_BUF_STATE_DONE , VB2_BUF_STATE_ERROR,
Hi Greg,
Quoted 5 lines · [email protected] wrote:
The patch below does not apply to the 4.1-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
For some reason I was under the impression the patch was needed for v4.1. However, I can now see that e0eff016f72 ("[media] vb2: allow requeuing buffers while streaming") which caused the original issue is only in v4.2 (with the fix on top).
So this patch can be safely ignored when it comes to stable.
My apologies for the noise.
Signature · 4 lines
Kind regards, Sakari Ailus [email protected]