Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/shmem-helper: Add .gem_create_object helper that sets map_cached flag

The helper drm_gem_shmem_create_object_cached() allocates an GEM SHMEM
object and sets the map_cached flag. Useful for drivers that want cached
mappings.

v3:
* style fixes

Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20200609090820.20256-2-tzimmermann@suse.de

+31
+27
drivers/gpu/drm/drm_gem_shmem_helper.c
··· 461 461 EXPORT_SYMBOL(drm_gem_shmem_purge); 462 462 463 463 /** 464 + * drm_gem_shmem_create_object_cached - Create a shmem buffer object with 465 + * cached mappings 466 + * @dev: DRM device 467 + * @size: Size of the object to allocate 468 + * 469 + * By default, shmem buffer objects use writecombine mappings. This 470 + * function implements struct drm_driver.gem_create_object for shmem 471 + * buffer objects with cached mappings. 472 + * 473 + * Returns: 474 + * A struct drm_gem_shmem_object * on success or NULL negative on failure. 475 + */ 476 + struct drm_gem_object * 477 + drm_gem_shmem_create_object_cached(struct drm_device *dev, size_t size) 478 + { 479 + struct drm_gem_shmem_object *shmem; 480 + 481 + shmem = kzalloc(sizeof(*shmem), GFP_KERNEL); 482 + if (!shmem) 483 + return NULL; 484 + shmem->map_cached = true; 485 + 486 + return &shmem->base; 487 + } 488 + EXPORT_SYMBOL(drm_gem_shmem_create_object_cached); 489 + 490 + /** 464 491 * drm_gem_shmem_dumb_create - Create a dumb shmem buffer object 465 492 * @file: DRM file structure to create the dumb buffer for 466 493 * @dev: DRM device
+4
include/drm/drm_gem_shmem_helper.h
··· 132 132 drm_gem_shmem_create_with_handle(struct drm_file *file_priv, 133 133 struct drm_device *dev, size_t size, 134 134 uint32_t *handle); 135 + 136 + struct drm_gem_object * 137 + drm_gem_shmem_create_object_cached(struct drm_device *dev, size_t size); 138 + 135 139 int drm_gem_shmem_dumb_create(struct drm_file *file, struct drm_device *dev, 136 140 struct drm_mode_create_dumb *args); 137 141