Skip to content

Commit

Permalink
V4L/DVB (3426): PATCH cx88-mpeg: cx8802_restart_queue() for blackbird
Browse files Browse the repository at this point in the history
Fixes "cx8802_restart_queue: queue is empty" storm in syslog

Signed-off-by: Jelle Foks <jelle@foks.8m.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
  • Loading branch information
Jelle Foks authored and Mauro Carvalho Chehab committed Jun 25, 2006
1 parent 774dd5d commit f14ac0b
Showing 1 changed file with 35 additions and 2 deletions.
37 changes: 35 additions & 2 deletions drivers/media/video/cx88/cx88-mpeg.c
Original file line number Diff line number Diff line change
Expand Up @@ -143,10 +143,43 @@ static int cx8802_restart_queue(struct cx8802_dev *dev,
struct cx88_buffer *buf;
struct list_head *item;

dprintk( 0, "cx8802_restart_queue\n" );
dprintk( 1, "cx8802_restart_queue\n" );
if (list_empty(&q->active))
{
dprintk( 0, "cx8802_restart_queue: queue is empty\n" );
struct cx88_buffer *prev;
prev = NULL;

dprintk(1, "cx8802_restart_queue: queue is empty\n" );

for (;;) {
if (list_empty(&q->queued))
return 0;
buf = list_entry(q->queued.next, struct cx88_buffer, vb.queue);
if (NULL == prev) {
list_del(&buf->vb.queue);
list_add_tail(&buf->vb.queue,&q->active);
cx8802_start_dma(dev, q, buf);
buf->vb.state = STATE_ACTIVE;
buf->count = q->count++;
mod_timer(&q->timeout, jiffies+BUFFER_TIMEOUT);
dprintk(1,"[%p/%d] restart_queue - first active\n",
buf,buf->vb.i);

} else if (prev->vb.width == buf->vb.width &&
prev->vb.height == buf->vb.height &&
prev->fmt == buf->fmt) {
list_del(&buf->vb.queue);
list_add_tail(&buf->vb.queue,&q->active);
buf->vb.state = STATE_ACTIVE;
buf->count = q->count++;
prev->risc.jmp[1] = cpu_to_le32(buf->risc.dma);
dprintk(1,"[%p/%d] restart_queue - move to active\n",
buf,buf->vb.i);
} else {
return 0;
}
prev = buf;
}
return 0;
}

Expand Down

0 comments on commit f14ac0b

Please sign in to comment.