diff options
| author | Rob Clark <robdclark@gmail.com> | 2013-08-07 13:41:23 -0400 |
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2013-08-18 20:34:43 -0400 |
| commit | 367bbd49202dd256dce1217c2f7cd0d5d1916f7b (patch) | |
| tree | 945aeb6b78881d4567b1064182e38a9b1227cfb1 | |
| parent | 5833bd2fe1c7d9e2650a11a8785b848bbd0d0188 (diff) | |
drm/gem: add drm_gem_create_mmap_offset_size()
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>
Signed-off-by: Dave Airlie <airlied@redhat.com>
| -rw-r--r-- | drivers/gpu/drm/drm_gem.c | 28 | ||||
| -rw-r--r-- | 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 9ab038c8dd5f..a8ba7da83d45 100644 --- a/drivers/gpu/drm/drm_gem.c +++ b/drivers/gpu/drm/drm_gem.c | |||
| @@ -317,24 +317,44 @@ drm_gem_free_mmap_offset(struct drm_gem_object *obj) | |||
| 317 | EXPORT_SYMBOL(drm_gem_free_mmap_offset); | 317 | EXPORT_SYMBOL(drm_gem_free_mmap_offset); |
| 318 | 318 | ||
| 319 | /** | 319 | /** |
| 320 | * drm_gem_create_mmap_offset - create a fake mmap offset for an object | 320 | * drm_gem_create_mmap_offset_size - create a fake mmap offset for an object |
| 321 | * @obj: obj in question | 321 | * @obj: obj in question |
| 322 | * @size: the virtual size | ||
| 322 | * | 323 | * |
| 323 | * GEM memory mapping works by handing back to userspace a fake mmap offset | 324 | * GEM memory mapping works by handing back to userspace a fake mmap offset |
| 324 | * it can use in a subsequent mmap(2) call. The DRM core code then looks | 325 | * it can use in a subsequent mmap(2) call. The DRM core code then looks |
| 325 | * up the object based on the offset and sets up the various memory mapping | 326 | * up the object based on the offset and sets up the various memory mapping |
| 326 | * structures. | 327 | * structures. |
| 327 | * | 328 | * |
| 328 | * This routine allocates and attaches a fake offset for @obj. | 329 | * This routine allocates and attaches a fake offset for @obj, in cases where |
| 330 | * the virtual size differs from the physical size (ie. obj->size). Otherwise | ||
| 331 | * just use drm_gem_create_mmap_offset(). | ||
| 329 | */ | 332 | */ |
| 330 | int | 333 | int |
| 331 | drm_gem_create_mmap_offset(struct drm_gem_object *obj) | 334 | drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size) |
| 332 | { | 335 | { |
| 333 | struct drm_device *dev = obj->dev; | 336 | struct drm_device *dev = obj->dev; |
| 334 | struct drm_gem_mm *mm = dev->mm_private; | 337 | struct drm_gem_mm *mm = dev->mm_private; |
| 335 | 338 | ||
| 336 | return drm_vma_offset_add(&mm->vma_manager, &obj->vma_node, | 339 | return drm_vma_offset_add(&mm->vma_manager, &obj->vma_node, |
| 337 | obj->size / PAGE_SIZE); | 340 | size / PAGE_SIZE); |
| 341 | } | ||
| 342 | EXPORT_SYMBOL(drm_gem_create_mmap_offset_size); | ||
| 343 | |||
| 344 | /** | ||
| 345 | * drm_gem_create_mmap_offset - create a fake mmap offset for an object | ||
| 346 | * @obj: obj in question | ||
| 347 | * | ||
| 348 | * GEM memory mapping works by handing back to userspace a fake mmap offset | ||
| 349 | * it can use in a subsequent mmap(2) call. The DRM core code then looks | ||
| 350 | * up the object based on the offset and sets up the various memory mapping | ||
| 351 | * structures. | ||
| 352 | * | ||
| 353 | * This routine allocates and attaches a fake offset for @obj. | ||
| 354 | */ | ||
| 355 | int drm_gem_create_mmap_offset(struct drm_gem_object *obj) | ||
| 356 | { | ||
| 357 | return drm_gem_create_mmap_offset_size(obj, obj->size); | ||
| 338 | } | 358 | } |
| 339 | EXPORT_SYMBOL(drm_gem_create_mmap_offset); | 359 | EXPORT_SYMBOL(drm_gem_create_mmap_offset); |
| 340 | 360 | ||
diff --git a/include/drm/drmP.h b/include/drm/drmP.h index 6a0918e7db65..d6d9a28fc6b4 100644 --- a/include/drm/drmP.h +++ b/include/drm/drmP.h | |||
| @@ -1614,6 +1614,7 @@ drm_gem_object_handle_unreference_unlocked(struct drm_gem_object *obj) | |||
| 1614 | 1614 | ||
| 1615 | void drm_gem_free_mmap_offset(struct drm_gem_object *obj); | 1615 | void drm_gem_free_mmap_offset(struct drm_gem_object *obj); |
| 1616 | int drm_gem_create_mmap_offset(struct drm_gem_object *obj); | 1616 | int drm_gem_create_mmap_offset(struct drm_gem_object *obj); |
| 1617 | int drm_gem_create_mmap_offset_size(struct drm_gem_object *obj, size_t size); | ||
| 1617 | 1618 | ||
| 1618 | struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, | 1619 | struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev, |
| 1619 | struct drm_file *filp, | 1620 | struct drm_file *filp, |
