| From aeff09276748b66072f2db2e668cec955cf41959 Mon Sep 17 00:00:00 2001 |
| From: Ezequiel Garcia <ezequiel@vanguardiasur.com.ar> |
| Date: Tue, 10 Mar 2015 11:37:14 -0300 |
| Subject: [media] stk1160: Make sure current buffer is released |
| |
| 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: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/media/usb/stk1160/stk1160-v4l.c | 17 +++++++++++++++-- |
| 1 file changed, 15 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/media/usb/stk1160/stk1160-v4l.c |
| +++ b/drivers/media/usb/stk1160/stk1160-v4l.c |
| @@ -240,6 +240,11 @@ static int stk1160_stop_streaming(struct |
| 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); |
| |
| /* |
| @@ -620,8 +625,16 @@ void stk1160_clear_queue(struct stk1160 |
| 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); |
| } |
| |