From: Tomasz Stanislawski Date: Tue, 7 Aug 2012 16:19:49 +0000 (-0300) Subject: [media] v4l: vb2-dma-contig: add reference counting for a device from allocator context X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=67a5d0cebf30020bdc4846892adf360c57610268;p=openwrt%2Fstaging%2Fblogic.git [media] v4l: vb2-dma-contig: add reference counting for a device from allocator context This patch adds taking reference to the device for MMAP buffers. Such buffers, may be exported using DMABUF mechanism. If the driver that created a queue is unloaded then the queue is released, the device might be released too. However, buffers cannot be released if they are referenced by DMABUF descriptor(s). The device pointer kept in a buffer must be valid for the whole buffer's lifetime. Therefore MMAP buffers should take a reference to the device to avoid risk of dangling pointers. Signed-off-by: Tomasz Stanislawski Acked-by: Hans Verkuil Acked-by: Laurent Pinchart Tested-by: Mauro Carvalho Chehab Signed-off-by: Mauro Carvalho Chehab --- diff --git a/drivers/media/v4l2-core/videobuf2-dma-contig.c b/drivers/media/v4l2-core/videobuf2-dma-contig.c index 78c281c55ad7..b35f38e9f2d7 100644 --- a/drivers/media/v4l2-core/videobuf2-dma-contig.c +++ b/drivers/media/v4l2-core/videobuf2-dma-contig.c @@ -148,6 +148,7 @@ static void vb2_dc_put(void *buf_priv) kfree(buf->sgt_base); } dma_free_coherent(buf->dev, buf->size, buf->vaddr, buf->dma_addr); + put_device(buf->dev); kfree(buf); } @@ -168,7 +169,8 @@ static void *vb2_dc_alloc(void *alloc_ctx, unsigned long size) return ERR_PTR(-ENOMEM); } - buf->dev = dev; + /* Prevent the device from being released while the buffer is used */ + buf->dev = get_device(dev); buf->size = size; buf->handler.refcount = &buf->refcount;