lkml.org 
[lkml]   [2015]   [May]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3.16.y-ckt 088/180] [media] stk1160: Make sure current buffer is released
    Date
    3.16.7-ckt11 -stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>

    commit aeff09276748b66072f2db2e668cec955cf41959 upstream.

    The available (i.e. not used) buffers are returned by stk1160_clear_queue(),
    on the stop_streaming() path. However, this is insufficient and the current
    buffer must be released as well. Fix it.

    Signed-off-by: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar>
    Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
    Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
    Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
    ---
    drivers/media/usb/stk1160/stk1160-v4l.c | 17 +++++++++++++++--
    1 file changed, 15 insertions(+), 2 deletions(-)

    diff --git a/drivers/media/usb/stk1160/stk1160-v4l.c b/drivers/media/usb/stk1160/stk1160-v4l.c
    index 5461341a31cb..45cf8c265612 100644
    --- a/drivers/media/usb/stk1160/stk1160-v4l.c
    +++ b/drivers/media/usb/stk1160/stk1160-v4l.c
    @@ -244,6 +244,11 @@ static int stk1160_stop_streaming(struct stk1160 *dev)
    if (mutex_lock_interruptible(&dev->v4l_lock))
    return -ERESTARTSYS;

    + /*
    + * Once URBs are cancelled, the URB complete handler
    + * won't be running. This is required to safely release the
    + * current buffer (dev->isoc_ctl.buf).
    + */
    stk1160_cancel_isoc(dev);

    /*
    @@ -624,8 +629,16 @@ void stk1160_clear_queue(struct stk1160 *dev)
    stk1160_info("buffer [%p/%d] aborted\n",
    buf, buf->vb.v4l2_buf.index);
    }
    - /* It's important to clear current buffer */
    - dev->isoc_ctl.buf = NULL;
    +
    + /* It's important to release the current buffer */
    + if (dev->isoc_ctl.buf) {
    + buf = dev->isoc_ctl.buf;
    + dev->isoc_ctl.buf = NULL;
    +
    + vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
    + stk1160_info("buffer [%p/%d] aborted\n",
    + buf, buf->vb.v4l2_buf.index);
    + }
    spin_unlock_irqrestore(&dev->buf_lock, flags);
    }


    \
     
     \ /
      Last update: 2015-05-07 12:41    [W:4.133 / U:0.136 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site