Skip to content

Commit 05b1de5

Browse files
committed
drm/cma-helper: Export dedicated wrappers for GEM object functions
Wrap GEM CMA functions for struct drm_gem_object_funcs and update all callers. This will allow for an update of the public interfaces of the GEM CMA helper library. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Maxime Ripard <maxime@cerno.tech> Link: https://patchwork.freedesktop.org/patch/msgid/20211115120148.21766-3-tzimmermann@suse.de
1 parent d0c4e34 commit 05b1de5

File tree

4 files changed

+94
-21
lines changed

4 files changed

+94
-21
lines changed

drivers/gpu/drm/drm_gem_cma_helper.c

Lines changed: 9 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,11 @@
3535
*/
3636

3737
static const struct drm_gem_object_funcs drm_gem_cma_default_funcs = {
38-
.free = drm_gem_cma_free_object,
39-
.print_info = drm_gem_cma_print_info,
40-
.get_sg_table = drm_gem_cma_get_sg_table,
41-
.vmap = drm_gem_cma_vmap,
42-
.mmap = drm_gem_cma_mmap,
38+
.free = drm_gem_cma_object_free,
39+
.print_info = drm_gem_cma_object_print_info,
40+
.get_sg_table = drm_gem_cma_object_get_sg_table,
41+
.vmap = drm_gem_cma_object_vmap,
42+
.mmap = drm_gem_cma_object_mmap,
4343
.vm_ops = &drm_gem_cma_vm_ops,
4444
};
4545

@@ -198,8 +198,6 @@ drm_gem_cma_create_with_handle(struct drm_file *file_priv,
198198
* This function frees the backing memory of the CMA GEM object, cleans up the
199199
* GEM object state and frees the memory used to store the object itself.
200200
* If the buffer is imported and the virtual address is set, it is released.
201-
* Drivers using the CMA helpers should set this as their
202-
* &drm_gem_object_funcs.free callback.
203201
*/
204202
void drm_gem_cma_free_object(struct drm_gem_object *gem_obj)
205203
{
@@ -388,9 +386,8 @@ EXPORT_SYMBOL(drm_gem_cma_print_info);
388386
* pages for a CMA GEM object
389387
* @obj: GEM object
390388
*
391-
* This function exports a scatter/gather table by
392-
* calling the standard DMA mapping API. Drivers using the CMA helpers should
393-
* set this as their &drm_gem_object_funcs.get_sg_table callback.
389+
* This function exports a scatter/gather table by calling the standard
390+
* DMA mapping API.
394391
*
395392
* Returns:
396393
* A pointer to the scatter/gather table of pinned pages or NULL on failure.
@@ -470,8 +467,7 @@ EXPORT_SYMBOL_GPL(drm_gem_cma_prime_import_sg_table);
470467
* This function maps a buffer into the kernel's
471468
* virtual address space. Since the CMA buffers are already mapped into the
472469
* kernel virtual address space this simply returns the cached virtual
473-
* address. Drivers using the CMA helpers should set this as their DRM
474-
* driver's &drm_gem_object_funcs.vmap callback.
470+
* address.
475471
*
476472
* Returns:
477473
* 0 on success, or a negative error code otherwise.
@@ -493,8 +489,7 @@ EXPORT_SYMBOL_GPL(drm_gem_cma_vmap);
493489
*
494490
* This function maps a buffer into a userspace process's address space.
495491
* In addition to the usual GEM VMA setup it immediately faults in the entire
496-
* object instead of using on-demand faulting. Drivers that use the CMA
497-
* helpers should set this as their &drm_gem_object_funcs.mmap callback.
492+
* object instead of using on-demand faulting.
498493
*
499494
* Returns:
500495
* 0 on success or a negative error code on failure.

drivers/gpu/drm/rcar-du/rcar_du_kms.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -327,11 +327,11 @@ const struct rcar_du_format_info *rcar_du_format_info(u32 fourcc)
327327
*/
328328

329329
static const struct drm_gem_object_funcs rcar_du_gem_funcs = {
330-
.free = drm_gem_cma_free_object,
331-
.print_info = drm_gem_cma_print_info,
332-
.get_sg_table = drm_gem_cma_get_sg_table,
333-
.vmap = drm_gem_cma_vmap,
334-
.mmap = drm_gem_cma_mmap,
330+
.free = drm_gem_cma_object_free,
331+
.print_info = drm_gem_cma_object_print_info,
332+
.get_sg_table = drm_gem_cma_object_get_sg_table,
333+
.vmap = drm_gem_cma_object_vmap,
334+
.mmap = drm_gem_cma_object_mmap,
335335
.vm_ops = &drm_gem_cma_vm_ops,
336336
};
337337

drivers/gpu/drm/vc4/vc4_bo.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -732,8 +732,8 @@ static const struct vm_operations_struct vc4_vm_ops = {
732732
static const struct drm_gem_object_funcs vc4_gem_object_funcs = {
733733
.free = vc4_free_object,
734734
.export = vc4_prime_export,
735-
.get_sg_table = drm_gem_cma_get_sg_table,
736-
.vmap = drm_gem_cma_vmap,
735+
.get_sg_table = drm_gem_cma_object_get_sg_table,
736+
.vmap = drm_gem_cma_object_vmap,
737737
.mmap = vc4_gem_object_mmap,
738738
.vm_ops = &vc4_vm_ops,
739739
};

include/drm/drm_gem_cma_helper.h

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,84 @@ struct sg_table *drm_gem_cma_get_sg_table(struct drm_gem_object *obj);
4848
int drm_gem_cma_vmap(struct drm_gem_object *obj, struct dma_buf_map *map);
4949
int drm_gem_cma_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma);
5050

51+
/*
52+
* GEM object functions
53+
*/
54+
55+
/**
56+
* drm_gem_cma_object_free - GEM object function for drm_gem_cma_free_object()
57+
* @obj: GEM object to free
58+
*
59+
* This function wraps drm_gem_cma_free_object(). Drivers that employ the CMA helpers
60+
* should use it as their &drm_gem_object_funcs.free handler.
61+
*/
62+
static inline void drm_gem_cma_object_free(struct drm_gem_object *obj)
63+
{
64+
drm_gem_cma_free_object(obj);
65+
}
66+
67+
/**
68+
* drm_gem_cma_object_print_info() - Print &drm_gem_cma_object info for debugfs
69+
* @p: DRM printer
70+
* @indent: Tab indentation level
71+
* @obj: GEM object
72+
*
73+
* This function wraps drm_gem_cma_print_info(). Drivers that employ the CMA helpers
74+
* should use this function as their &drm_gem_object_funcs.print_info handler.
75+
*/
76+
static inline void drm_gem_cma_object_print_info(struct drm_printer *p, unsigned int indent,
77+
const struct drm_gem_object *obj)
78+
{
79+
drm_gem_cma_print_info(p, indent, obj);
80+
}
81+
82+
/**
83+
* drm_gem_cma_object_get_sg_table - GEM object function for drm_gem_cma_get_sg_table()
84+
* @obj: GEM object
85+
*
86+
* This function wraps drm_gem_cma_get_sg_table(). Drivers that employ the CMA helpers should
87+
* use it as their &drm_gem_object_funcs.get_sg_table handler.
88+
*
89+
* Returns:
90+
* A pointer to the scatter/gather table of pinned pages or NULL on failure.
91+
*/
92+
static inline struct sg_table *drm_gem_cma_object_get_sg_table(struct drm_gem_object *obj)
93+
{
94+
return drm_gem_cma_get_sg_table(obj);
95+
}
96+
97+
/*
98+
* drm_gem_cma_object_vmap - GEM object function for drm_gem_cma_vmap()
99+
* @obj: GEM object
100+
* @map: Returns the kernel virtual address of the CMA GEM object's backing store.
101+
*
102+
* This function wraps drm_gem_cma_vmap(). Drivers that employ the CMA helpers should
103+
* use it as their &drm_gem_object_funcs.vmap handler.
104+
*
105+
* Returns:
106+
* 0 on success or a negative error code on failure.
107+
*/
108+
static inline int drm_gem_cma_object_vmap(struct drm_gem_object *obj, struct dma_buf_map *map)
109+
{
110+
return drm_gem_cma_vmap(obj, map);
111+
}
112+
113+
/**
114+
* drm_gem_cma_object_mmap - GEM object function for drm_gem_cma_mmap()
115+
* @obj: GEM object
116+
* @vma: VMA for the area to be mapped
117+
*
118+
* This function wraps drm_gem_cma_mmap(). Drivers that employ the cma helpers should
119+
* use it as their &drm_gem_object_funcs.mmap handler.
120+
*
121+
* Returns:
122+
* 0 on success or a negative error code on failure.
123+
*/
124+
static inline int drm_gem_cma_object_mmap(struct drm_gem_object *obj, struct vm_area_struct *vma)
125+
{
126+
return drm_gem_cma_mmap(obj, vma);
127+
}
128+
51129
/*
52130
* Driver ops
53131
*/

0 commit comments

Comments
 (0)