[media] solo6x10: clean up properly in stop_streaming
authorAndrey Utkin <andrey.krieger.utkin@gmail.com>
Thu, 6 Nov 2014 21:06:18 +0000 (18:06 -0300)
committerMauro Carvalho Chehab <mchehab@osg.samsung.com>
Tue, 11 Nov 2014 10:45:32 +0000 (08:45 -0200)
This fixes warning from drivers/media/v4l2-core/videobuf2-core.c,
WARN_ON(atomic_read(&q->owned_by_drv_count)).

Signed-off-by: Andrey Utkin <andrey.krieger.utkin@gmail.com>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com>
drivers/media/pci/solo6x10/solo6x10-v4l2-enc.c

index 28023f9f1dc7e53061bfc062710652ef4cdfbd66..6cd6a25b25d7e8ca1c84deed467b7676ca58f29f 100644 (file)
@@ -781,9 +781,19 @@ static int solo_enc_start_streaming(struct vb2_queue *q, unsigned int count)
 static void solo_enc_stop_streaming(struct vb2_queue *q)
 {
        struct solo_enc_dev *solo_enc = vb2_get_drv_priv(q);
+       unsigned long flags;
 
+       spin_lock_irqsave(&solo_enc->av_lock, flags);
        solo_enc_off(solo_enc);
-       INIT_LIST_HEAD(&solo_enc->vidq_active);
+       while (!list_empty(&solo_enc->vidq_active)) {
+               struct solo_vb2_buf *buf = list_entry(
+                               solo_enc->vidq_active.next,
+                               struct solo_vb2_buf, list);
+
+               list_del(&buf->list);
+               vb2_buffer_done(&buf->vb, VB2_BUF_STATE_ERROR);
+       }
+       spin_unlock_irqrestore(&solo_enc->av_lock, flags);
        solo_ring_stop(solo_enc->solo_dev);
 }