[PATCH 5/9] drm/gem: add drm_gem_create_mmap_offset_size()
David Herrmann
dh.herrmann at gmail.com
Thu Aug 8 08:29:25 PDT 2013
Hi
On Wed, Aug 7, 2013 at 7:41 PM, Rob Clark <robdclark at gmail.com> wrote:
> Variant of drm_gem_create_mmap_offset() which doesn't make the
> assumption that virtual size and physical size (obj->size) are the same.
> This is needed in omapdrm to deal with tiled buffers. And lets us get
> rid of a duplicated and slightly modified version of
> drm_gem_create_mmap_offset() in omapdrm.
>
> Signed-off-by: Rob Clark <robdclark at gmail.com>
Reviewed-by: David Herrmann <dh.herrmann at gmail.com>
Regards
David
> ---
> drivers/gpu/drm/drm_gem.c | 28 ++++++++++++++++++++++++----
> include/drm/drmP.h | 1 +
> 2 files changed, 25 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
> index 1f76572..84d59f7 100644
> --- a/drivers/gpu/drm/drm_gem.c
> +++ b/drivers/gpu/drm/drm_gem.c
> @@ -303,24 +303,44 @@ drm_gem_free_mmap_offset(struct drm_gem_object *obj)
> EXPORT_SYMBOL(drm_gem_free_mmap_offset);
>
> /**
> - * drm_gem_create_mmap_offset - create a fake mmap offset for an object
> + * drm_gem_create_mmap_offset_size - create a fake mmap offset for an object
> * @obj: obj in question
> + * @size: the virtual size
> *
> * GEM memory mapping works by handing back to userspace a fake mmap offset
> * it can use in a subsequent mmap(2) call. The DRM core code then looks
> * up the object based on the offset and sets up the various memory mapping
> * structures.
> *
> - * This routine allocates and attaches a fake offset for @obj.
> + * This routine allocates and attaches a fake offset for @obj, in cases where
> + * the virtual size differs from the physical size (ie. obj->size). Otherwise
> + * just use drm_gem_create_mmap_offset().
> */
> int
> -drm_gem_create_mmap_offset(struct drm_gem_object *obj)
> +drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size)
> {
> struct drm_device *dev = obj->dev;
> struct drm_gem_mm *mm = dev->mm_private;
>
> return drm_vma_offset_add(&mm->vma_manager, &obj->vma_node,
> - obj->size / PAGE_SIZE);
> + size / PAGE_SIZE);
> +}
> +EXPORT_SYMBOL(drm_gem_create_mmap_offset_size);
> +
> +/**
> + * drm_gem_create_mmap_offset - create a fake mmap offset for an object
> + * @obj: obj in question
> + *
> + * GEM memory mapping works by handing back to userspace a fake mmap offset
> + * it can use in a subsequent mmap(2) call. The DRM core code then looks
> + * up the object based on the offset and sets up the various memory mapping
> + * structures.
> + *
> + * This routine allocates and attaches a fake offset for @obj.
> + */
> +int drm_gem_create_mmap_offset(struct drm_gem_object *obj)
> +{
> + return drm_gem_create_mmap_offset_size(obj, obj->size);
> }
> EXPORT_SYMBOL(drm_gem_create_mmap_offset);
>
> diff --git a/include/drm/drmP.h b/include/drm/drmP.h
> index 1cc765a..d00eb89 100644
> --- a/include/drm/drmP.h
> +++ b/include/drm/drmP.h
> @@ -1668,6 +1668,7 @@ drm_gem_object_handle_unreference_unlocked(struct drm_gem_object *obj)
>
> void drm_gem_free_mmap_offset(struct drm_gem_object *obj);
> int drm_gem_create_mmap_offset(struct drm_gem_object *obj);
> +int drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size);
>
> struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev,
> struct drm_file *filp,
> --
> 1.8.3.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
More information about the dri-devel
mailing list