aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorSumit Semwal <sumit.semwal@linaro.org>2015-01-23 02:23:43 -0500
committerSumit Semwal <sumit.semwal@linaro.org>2015-04-21 05:17:16 -0400
commitd8fbe341beb617ebb22b98fb893e4aa32ae2d864 (patch)
tree2e19c951d2b6ffef2319d87ec8a6c39e4e1ab8ee /drivers
parent646da63172f660ba84f195c1165360a9b73583ee (diff)
dma-buf: cleanup dma_buf_export() to make it easily extensible
At present, dma_buf_export() takes a series of parameters, which makes it difficult to add any new parameters for exporters, if required. Make it simpler by moving all these parameters into a struct, and pass the struct * as parameter to dma_buf_export(). While at it, unite dma_buf_export_named() with dma_buf_export(), and change all callers accordingly. Reviewed-by: Maarten Lankhorst <maarten.lankhorst@canonical.com> Reviewed-by: Daniel Thompson <daniel.thompson@linaro.org> Acked-by: Mauro Carvalho Chehab <mchehab@osg.samsung.com> Acked-by: Dave Airlie <airlied@redhat.com> Signed-off-by: Sumit Semwal <sumit.semwal@linaro.org>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/dma-buf/dma-buf.c47
-rw-r--r--drivers/gpu/drm/armada/armada_gem.c10
-rw-r--r--drivers/gpu/drm/drm_prime.c12
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_dmabuf.c9
-rw-r--r--drivers/gpu/drm/i915/i915_gem_dmabuf.c10
-rw-r--r--drivers/gpu/drm/omapdrm/omap_gem_dmabuf.c9
-rw-r--r--drivers/gpu/drm/tegra/gem.c10
-rw-r--r--drivers/gpu/drm/ttm/ttm_object.c9
-rw-r--r--drivers/gpu/drm/udl/udl_dmabuf.c9
-rw-r--r--drivers/media/v4l2-core/videobuf2-dma-contig.c8
-rw-r--r--drivers/media/v4l2-core/videobuf2-dma-sg.c8
-rw-r--r--drivers/media/v4l2-core/videobuf2-vmalloc.c8
-rw-r--r--drivers/staging/android/ion/ion.c9
13 files changed, 112 insertions, 46 deletions
diff --git a/drivers/dma-buf/dma-buf.c b/drivers/dma-buf/dma-buf.c
index 5be225c2ba98..c5a9138a6a8d 100644
--- a/drivers/dma-buf/dma-buf.c
+++ b/drivers/dma-buf/dma-buf.c
@@ -265,43 +265,40 @@ static inline int is_dma_buf_file(struct file *file)
265} 265}
266 266
267/** 267/**
268 * dma_buf_export_named - Creates a new dma_buf, and associates an anon file 268 * dma_buf_export - Creates a new dma_buf, and associates an anon file
269 * with this buffer, so it can be exported. 269 * with this buffer, so it can be exported.
270 * Also connect the allocator specific data and ops to the buffer. 270 * Also connect the allocator specific data and ops to the buffer.
271 * Additionally, provide a name string for exporter; useful in debugging. 271 * Additionally, provide a name string for exporter; useful in debugging.
272 * 272 *
273 * @priv: [in] Attach private data of allocator to this buffer 273 * @exp_info: [in] holds all the export related information provided
274 * @ops: [in] Attach allocator-defined dma buf ops to the new buffer. 274 * by the exporter. see struct dma_buf_export_info
275 * @size: [in] Size of the buffer 275 * for further details.
276 * @flags: [in] mode flags for the file.
277 * @exp_name: [in] name of the exporting module - useful for debugging.
278 * @resv: [in] reservation-object, NULL to allocate default one.
279 * 276 *
280 * Returns, on success, a newly created dma_buf object, which wraps the 277 * Returns, on success, a newly created dma_buf object, which wraps the
281 * supplied private data and operations for dma_buf_ops. On either missing 278 * supplied private data and operations for dma_buf_ops. On either missing
282 * ops, or error in allocating struct dma_buf, will return negative error. 279 * ops, or error in allocating struct dma_buf, will return negative error.
283 * 280 *
284 */ 281 */
285struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops, 282struct dma_buf *dma_buf_export(const struct dma_buf_export_info *exp_info)
286 size_t size, int flags, const char *exp_name,
287 struct reservation_object *resv)
288{ 283{
289 struct dma_buf *dmabuf; 284 struct dma_buf *dmabuf;
285 struct reservation_object *resv = exp_info->resv;
290 struct file *file; 286 struct file *file;
291 size_t alloc_size = sizeof(struct dma_buf); 287 size_t alloc_size = sizeof(struct dma_buf);
292 if (!resv) 288 if (!exp_info->resv)
293 alloc_size += sizeof(struct reservation_object); 289 alloc_size += sizeof(struct reservation_object);
294 else 290 else
295 /* prevent &dma_buf[1] == dma_buf->resv */ 291 /* prevent &dma_buf[1] == dma_buf->resv */
296 alloc_size += 1; 292 alloc_size += 1;
297 293
298 if (WARN_ON(!priv || !ops 294 if (WARN_ON(!exp_info->priv
299 || !ops->map_dma_buf 295 || !exp_info->ops
300 || !ops->unmap_dma_buf 296 || !exp_info->ops->map_dma_buf
301 || !ops->release 297 || !exp_info->ops->unmap_dma_buf
302 || !ops->kmap_atomic 298 || !exp_info->ops->release
303 || !ops->kmap 299 || !exp_info->ops->kmap_atomic
304 || !ops->mmap)) { 300 || !exp_info->ops->kmap
301 || !exp_info->ops->mmap)) {
305 return ERR_PTR(-EINVAL); 302 return ERR_PTR(-EINVAL);
306 } 303 }
307 304
@@ -309,10 +306,10 @@ struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops,
309 if (dmabuf == NULL) 306 if (dmabuf == NULL)
310 return ERR_PTR(-ENOMEM); 307 return ERR_PTR(-ENOMEM);
311 308
312 dmabuf->priv = priv; 309 dmabuf->priv = exp_info->priv;
313 dmabuf->ops = ops; 310 dmabuf->ops = exp_info->ops;
314 dmabuf->size = size; 311 dmabuf->size = exp_info->size;
315 dmabuf->exp_name = exp_name; 312 dmabuf->exp_name = exp_info->exp_name;
316 init_waitqueue_head(&dmabuf->poll); 313 init_waitqueue_head(&dmabuf->poll);
317 dmabuf->cb_excl.poll = dmabuf->cb_shared.poll = &dmabuf->poll; 314 dmabuf->cb_excl.poll = dmabuf->cb_shared.poll = &dmabuf->poll;
318 dmabuf->cb_excl.active = dmabuf->cb_shared.active = 0; 315 dmabuf->cb_excl.active = dmabuf->cb_shared.active = 0;
@@ -323,7 +320,8 @@ struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops,
323 } 320 }
324 dmabuf->resv = resv; 321 dmabuf->resv = resv;
325 322
326 file = anon_inode_getfile("dmabuf", &dma_buf_fops, dmabuf, flags); 323 file = anon_inode_getfile("dmabuf", &dma_buf_fops, dmabuf,
324 exp_info->flags);
327 if (IS_ERR(file)) { 325 if (IS_ERR(file)) {
328 kfree(dmabuf); 326 kfree(dmabuf);
329 return ERR_CAST(file); 327 return ERR_CAST(file);
@@ -341,8 +339,7 @@ struct dma_buf *dma_buf_export_named(void *priv, const struct dma_buf_ops *ops,
341 339
342 return dmabuf; 340 return dmabuf;
343} 341}
344EXPORT_SYMBOL_GPL(dma_buf_export_named); 342EXPORT_SYMBOL_GPL(dma_buf_export);
345
346 343
347/** 344/**
348 * dma_buf_fd - returns a file descriptor for the given dma_buf 345 * dma_buf_fd - returns a file descriptor for the given dma_buf
diff --git a/drivers/gpu/drm/armada/armada_gem.c b/drivers/gpu/drm/armada/armada_gem.c
index ef5feeecec84..580e10acaa3a 100644
--- a/drivers/gpu/drm/armada/armada_gem.c
+++ b/drivers/gpu/drm/armada/armada_gem.c
@@ -538,8 +538,14 @@ struct dma_buf *
538armada_gem_prime_export(struct drm_device *dev, struct drm_gem_object *obj, 538armada_gem_prime_export(struct drm_device *dev, struct drm_gem_object *obj,
539 int flags) 539 int flags)
540{ 540{
541 return dma_buf_export(obj, &armada_gem_prime_dmabuf_ops, obj->size, 541 DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
542 O_RDWR, NULL); 542
543 exp_info.ops = &armada_gem_prime_dmabuf_ops;
544 exp_info.size = obj->size;
545 exp_info.flags = O_RDWR;
546 exp_info.priv = obj;
547
548 return dma_buf_export(&exp_info);
543} 549}
544 550
545struct drm_gem_object * 551struct drm_gem_object *
diff --git a/drivers/gpu/drm/drm_prime.c b/drivers/gpu/drm/drm_prime.c
index 7482b06cd08f..7fec191b45f7 100644
--- a/drivers/gpu/drm/drm_prime.c
+++ b/drivers/gpu/drm/drm_prime.c
@@ -339,13 +339,17 @@ static const struct dma_buf_ops drm_gem_prime_dmabuf_ops = {
339struct dma_buf *drm_gem_prime_export(struct drm_device *dev, 339struct dma_buf *drm_gem_prime_export(struct drm_device *dev,
340 struct drm_gem_object *obj, int flags) 340 struct drm_gem_object *obj, int flags)
341{ 341{
342 struct reservation_object *robj = NULL; 342 DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
343
344 exp_info.ops = &drm_gem_prime_dmabuf_ops;
345 exp_info.size = obj->size;
346 exp_info.flags = flags;
347 exp_info.priv = obj;
343 348
344 if (dev->driver->gem_prime_res_obj) 349 if (dev->driver->gem_prime_res_obj)
345 robj = dev->driver->gem_prime_res_obj(obj); 350 exp_info.resv = dev->driver->gem_prime_res_obj(obj);
346 351
347 return dma_buf_export(obj, &drm_gem_prime_dmabuf_ops, obj->size, 352 return dma_buf_export(&exp_info);
348 flags, robj);
349} 353}
350EXPORT_SYMBOL(drm_gem_prime_export); 354EXPORT_SYMBOL(drm_gem_prime_export);
351 355
diff --git a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
index 3833bf8ca025..cd485c091b30 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_dmabuf.c
@@ -185,9 +185,14 @@ struct dma_buf *exynos_dmabuf_prime_export(struct drm_device *drm_dev,
185 struct drm_gem_object *obj, int flags) 185 struct drm_gem_object *obj, int flags)
186{ 186{
187 struct exynos_drm_gem_obj *exynos_gem_obj = to_exynos_gem_obj(obj); 187 struct exynos_drm_gem_obj *exynos_gem_obj = to_exynos_gem_obj(obj);
188 DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
188 189</