Hi On Wed, Aug 7, 2013 at 7:41 PM, Rob Clark <robdclark@xxxxxxxxx> 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@xxxxxxxxx> Reviewed-by: David Herrmann <dh.herrmann@xxxxxxxxx> 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@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel