Commit 0b600512 authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab

V4L/DVB (5074): Some fixes at stream waitqueue on vivi

There are several potential troubles on vivi waitqueue code:
- Watchdog timer should be reset at every received frame;
- Watchdog timer should be reset at the beginning of vivi_thread();
- Checks for errors when creating a newer thread with kernel_thread();
- Wake up vivi_thread() after creating it.
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@infradead.org>
parent df3a7104
...@@ -471,12 +471,13 @@ static void vivi_thread_tick(struct vivi_dmaqueue *dma_q) ...@@ -471,12 +471,13 @@ static void vivi_thread_tick(struct vivi_dmaqueue *dma_q)
/* Fill buffer */ /* Fill buffer */
vivi_fillbuff(dev,buf); vivi_fillbuff(dev,buf);
}
if (list_empty(&dma_q->active)) { if (list_empty(&dma_q->active)) {
del_timer(&dma_q->timeout); del_timer(&dma_q->timeout);
} else { } else {
mod_timer(&dma_q->timeout, jiffies+BUFFER_TIMEOUT); mod_timer(&dma_q->timeout, jiffies+BUFFER_TIMEOUT);
} }
}
if (bc != 1) if (bc != 1)
dprintk(1,"%s: %d buffers handled (should be 1)\n",__FUNCTION__,bc); dprintk(1,"%s: %d buffers handled (should be 1)\n",__FUNCTION__,bc);
} }
...@@ -522,6 +523,8 @@ static int vivi_thread(void *data) ...@@ -522,6 +523,8 @@ static int vivi_thread(void *data)
dprintk(1,"thread started\n"); dprintk(1,"thread started\n");
mod_timer(&dma_q->timeout, jiffies+BUFFER_TIMEOUT);
for (;;) { for (;;) {
vivi_sleep(dma_q); vivi_sleep(dma_q);
...@@ -545,6 +548,9 @@ static int vivi_start_thread(struct vivi_dmaqueue *dma_q) ...@@ -545,6 +548,9 @@ static int vivi_start_thread(struct vivi_dmaqueue *dma_q)
printk(KERN_ERR "vivi: kernel_thread() failed\n"); printk(KERN_ERR "vivi: kernel_thread() failed\n");
return PTR_ERR(dma_q->kthread); return PTR_ERR(dma_q->kthread);
} }
/* Wakes thread */
wake_up_interruptible(&dma_q->wq);
dprintk(1,"returning from %s\n",__FUNCTION__); dprintk(1,"returning from %s\n",__FUNCTION__);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment