Message ID | 1375897287-8787-6-git-send-email-robdclark@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Headers | show |
Hi On Wed, Aug 7, 2013 at 7:41 PM, Rob Clark <robdclark@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@gmail.com> Reviewed-by: David Herrmann <dh.herrmann@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@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel
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,
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@gmail.com> --- drivers/gpu/drm/drm_gem.c | 28 ++++++++++++++++++++++++---- include/drm/drmP.h | 1 + 2 files changed, 25 insertions(+), 4 deletions(-)