Commit 20be7ab8 authored by Hans Verkuil's avatar Hans Verkuil Committed by Mauro Carvalho Chehab

[media] vb2: add a dev field to use for the default allocation context

The allocation context is nothing more than a per-plane device pointer
to use when allocating buffers. So just provide a dev pointer in vb2_queue
for that purpose and drivers can skip allocating/releasing/filling in
the allocation context unless they require different per-plane device
pointers as used by some Samsung SoCs.
Signed-off-by: 's avatarHans Verkuil <>
Reviewed-by: 's avatarLaurent Pinchart <>
Cc: Sakari Ailus <>
Cc: Florian Echtler <>
Cc: Federico Vaga <>
Cc: "Lad, Prabhakar" <>
Cc: Scott Jiang <>
Acked-by: 's avatarPhilipp Zabel <>
Cc: Fabien Dessenne <>
Acked-by: 's avatarBenoit Parrot <>
Cc: Mikhail Ulyanov <>
Cc: Guennadi Liakhovetski <>
Cc: Jonathan Corbet <>
Cc: Ludovic Desroches <>
Cc: Sergei Shtylyov <>
Cc: Kyungmin Park <>
Cc: Sylwester Nawrocki <>
Signed-off-by: 's avatarMauro Carvalho Chehab <>
parent d16e832d
......@@ -206,7 +206,8 @@ static int __vb2_buf_mem_alloc(struct vb2_buffer *vb)
for (plane = 0; plane < vb->num_planes; ++plane) {
unsigned long size = PAGE_ALIGN(vb->planes[plane].length);
mem_priv = call_ptr_memop(vb, alloc, q->alloc_ctx[plane],
mem_priv = call_ptr_memop(vb, alloc,
q->alloc_ctx[plane] ? : &q->dev,
q->dma_attrs, size, dma_dir, q->gfp_flags);
if (IS_ERR_OR_NULL(mem_priv))
goto free;
......@@ -1131,9 +1132,10 @@ static int __qbuf_userptr(struct vb2_buffer *vb, const void *pb)
vb->planes[plane].data_offset = 0;
/* Acquire each plane's memory */
mem_priv = call_ptr_memop(vb, get_userptr, q->alloc_ctx[plane],
planes[plane].length, dma_dir);
mem_priv = call_ptr_memop(vb, get_userptr,
q->alloc_ctx[plane] ? : &q->dev,
planes[plane].length, dma_dir);
if (IS_ERR_OR_NULL(mem_priv)) {
dprintk(1, "failed acquiring userspace "
"memory for plane %d\n", plane);
......@@ -1256,8 +1258,8 @@ static int __qbuf_dmabuf(struct vb2_buffer *vb, const void *pb)
/* Acquire each plane's memory */
mem_priv = call_ptr_memop(vb, attach_dmabuf,
q->alloc_ctx[plane], dbuf, planes[plane].length,
q->alloc_ctx[plane] ? : &q->dev,
dbuf, planes[plane].length, dma_dir);
if (IS_ERR(mem_priv)) {
dprintk(1, "failed to attach dmabuf\n");
ret = PTR_ERR(mem_priv);
......@@ -400,6 +400,8 @@ struct vb2_buf_ops {
* caller. For example, for V4L2, it should match
* the V4L2_BUF_TYPE_* in include/uapi/linux/videodev2.h
* @io_modes: supported io methods (see vb2_io_modes enum)
* @dev: device to use for the default allocation context if the driver
* doesn't fill in the @alloc_ctx array.
* @dma_attrs: DMA attributes to use for the DMA. May be NULL.
* @fileio_read_once: report EOF after reading the first buffer
* @fileio_write_immediately: queue buffer after each write() call
......@@ -467,6 +469,7 @@ struct vb2_buf_ops {
struct vb2_queue {
unsigned int type;
unsigned int io_modes;
struct device *dev;
const struct dma_attrs *dma_attrs;
unsigned fileio_read_once:1;
unsigned fileio_write_immediately:1;
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