drm/cma-helper: Add DRM_GEM_CMA_VMAP_DRIVER_OPS
This adds functionality to the CMA helper which ensures that the kernel virtual address is set on the CMA GEM object also for imported buffers. The drivers have been audited to ensure that none set ->vaddr on imported buffers, making the conditional dma_buf_vunmap() call in drm_gem_cma_free_object() safe. Signed-off-by: Noralf Trønnes <noralf@tronnes.org> Acked-by: Christian König <christian.koenig@amd.com> Reviewed-by: Eric Anholt <eric@anholt.net> Link: https://patchwork.freedesktop.org/patch/msgid/20181110145647.17580-5-noralf@tronnes.org
This commit is contained in:
@ -103,4 +103,28 @@ int drm_gem_cma_prime_mmap(struct drm_gem_object *obj,
|
||||
void *drm_gem_cma_prime_vmap(struct drm_gem_object *obj);
|
||||
void drm_gem_cma_prime_vunmap(struct drm_gem_object *obj, void *vaddr);
|
||||
|
||||
struct drm_gem_object *
|
||||
drm_cma_gem_create_object_default_funcs(struct drm_device *dev, size_t size);
|
||||
|
||||
/**
|
||||
* DRM_GEM_CMA_VMAP_DRIVER_OPS - CMA GEM driver operations ensuring a virtual
|
||||
* address on the buffer
|
||||
*
|
||||
* This macro provides a shortcut for setting the default GEM operations in the
|
||||
* &drm_driver structure for drivers that need the virtual address also on
|
||||
* imported buffers.
|
||||
*/
|
||||
#define DRM_GEM_CMA_VMAP_DRIVER_OPS \
|
||||
.gem_create_object = drm_cma_gem_create_object_default_funcs, \
|
||||
.dumb_create = drm_gem_cma_dumb_create, \
|
||||
.prime_handle_to_fd = drm_gem_prime_handle_to_fd, \
|
||||
.prime_fd_to_handle = drm_gem_prime_fd_to_handle, \
|
||||
.gem_prime_import_sg_table = drm_gem_cma_prime_import_sg_table_vmap, \
|
||||
.gem_prime_mmap = drm_gem_prime_mmap
|
||||
|
||||
struct drm_gem_object *
|
||||
drm_gem_cma_prime_import_sg_table_vmap(struct drm_device *drm,
|
||||
struct dma_buf_attachment *attach,
|
||||
struct sg_table *sgt);
|
||||
|
||||
#endif /* __DRM_GEM_CMA_HELPER_H__ */
|
||||
|
Reference in New Issue
Block a user