V4L/DVB (11029): video: use videobuf_waiton() in sh_mobile_ceu free_buffer()
authorMagnus Damm <damm@igel.co.jp>
Fri, 13 Mar 2009 09:08:20 +0000 (06:08 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:43:21 +0000 (12:43 -0300)
Make sure videobuf_waiton() is used before freeing a buffer.
Without this fix we may return the buffer to the allocator
before the bus mastering operation is finished.

Reported-by: Matthieu CASTET <matthieu.castet@parrot.com>
Tested-by: Kuninori Morimoto <morimoto.kuninori@renesas.com>
Signed-off-by: Magnus Damm <damm@igel.co.jp>
Signed-off-by: Guennadi Liakhovetski <g.liakhovetski@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/sh_mobile_ceu_camera.c

index 55a5eae77babb87390850a9f9dfc5f29f2d37e6f..b5e37a530c62a9cad5ac1401d78639c31577d62f 100644 (file)
@@ -174,6 +174,7 @@ static void free_buffer(struct videobuf_queue *vq,
        if (in_interrupt())
                BUG();
 
+       videobuf_waiton(&buf->vb, 0, 0);
        videobuf_dma_contig_free(vq, &buf->vb);
        dev_dbg(&icd->dev, "%s freed\n", __func__);
        buf->vb.state = VIDEOBUF_NEEDS_INIT;