aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/drm_gem.c20
-rw-r--r--drivers/gpu/drm/gma500/framebuffer.c6
-rw-r--r--drivers/gpu/drm/gma500/gem.c7
-rw-r--r--drivers/gpu/drm/i915/i915_gem_dmabuf.c7
-rw-r--r--drivers/gpu/drm/i915/i915_gem_stolen.c4
-rw-r--r--drivers/gpu/drm/omapdrm/omap_gem.c3
-rw-r--r--include/drm/drmP.h4
7 files changed, 20 insertions, 31 deletions
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index 603f256152ef..1ad9e7ec0119 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -132,16 +132,14 @@ drm_gem_destroy(struct drm_device *dev)
132int drm_gem_object_init(struct drm_device *dev, 132int drm_gem_object_init(struct drm_device *dev,
133 struct drm_gem_object *obj, size_t size) 133 struct drm_gem_object *obj, size_t size)
134{ 134{
135 BUG_ON((size & (PAGE_SIZE - 1)) != 0); 135 struct file *filp;
136 136
137 obj->dev = dev; 137 filp = shmem_file_setup("drm mm object", size, VM_NORESERVE);
138 obj->filp = shmem_file_setup("drm mm object", size, VM_NORESERVE); 138 if (IS_ERR(filp))
139 if (IS_ERR(obj->filp)) 139 return PTR_ERR(filp);
140 return PTR_ERR(obj->filp);
141 140
142 kref_init(&obj->refcount); 141 drm_gem_private_object_init(dev, obj, size);
143 atomic_set(&obj->handle_count, 0); 142 obj->filp = filp;
144 obj->size = size;
145 143
146 return 0; 144 return 0;
147} 145}
@@ -152,8 +150,8 @@ EXPORT_SYMBOL(drm_gem_object_init);
152 * no GEM provided backing store. Instead the caller is responsible for 150 * no GEM provided backing store. Instead the caller is responsible for
153 * backing the object and handling it. 151 * backing the object and handling it.
154 */ 152 */
155int drm_gem_private_object_init(struct drm_device *dev, 153void drm_gem_private_object_init(struct drm_device *dev,
156 struct drm_gem_object *obj, size_t size) 154 struct drm_gem_object *obj, size_t size)
157{ 155{
158 BUG_ON((size & (PAGE_SIZE - 1)) != 0); 156 BUG_ON((size & (PAGE_SIZE - 1)) != 0);
159 157
@@ -163,8 +161,6 @@ int drm_gem_private_object_init(struct drm_device *dev,
163 kref_init(&obj->refcount); 161 kref_init(&obj->refcount);
164 atomic_set(&obj->handle_count, 0); 162 atomic_set(&obj->handle_count, 0);
165 obj->size = size; 163 obj->size = size;
166
167 return 0;
168} 164}
169EXPORT_SYMBOL(drm_gem_private_object_init); 165EXPORT_SYMBOL(drm_gem_private_object_init);
170 166
diff --git a/drivers/gpu/drm/gma500/framebuffer.c b/drivers/gpu/drm/gma500/framebuffer.c
index 8b1b6d923abe..362dd2ad286f 100644
--- a/drivers/gpu/drm/gma500/framebuffer.c
+++ b/drivers/gpu/drm/gma500/framebuffer.c
@@ -321,10 +321,8 @@ static struct gtt_range *psbfb_alloc(struct drm_device *dev, int aligned_size)
321 /* Begin by trying to use stolen memory backing */ 321 /* Begin by trying to use stolen memory backing */
322 backing = psb_gtt_alloc_range(dev, aligned_size, "fb", 1); 322 backing = psb_gtt_alloc_range(dev, aligned_size, "fb", 1);
323 if (backing) { 323 if (backing) {
324 if (drm_gem_private_object_init(dev, 324 drm_gem_private_object_init(dev, &backing->gem, aligned_size);
325 &backing->gem, aligned_size) == 0) 325 return backing;
326 return backing;
327 psb_gtt_free_range(dev, backing);
328 } 326 }
329 return NULL; 327 return NULL;
330} 328}
diff --git a/drivers/gpu/drm/gma500/gem.c b/drivers/gpu/drm/gma500/gem.c
index eefd6cc5b80d..fe1d3320ce6a 100644
--- a/drivers/gpu/drm/gma500/gem.c
+++ b/drivers/gpu/drm/gma500/gem.c
@@ -261,11 +261,12 @@ static int psb_gem_create_stolen(struct drm_file *file, struct drm_device *dev,
261 struct gtt_range *gtt = psb_gtt_alloc_range(dev, size, "gem", 1); 261 struct gtt_range *gtt = psb_gtt_alloc_range(dev, size, "gem", 1);
262 if (gtt == NULL) 262 if (gtt == NULL)
263 return -ENOMEM; 263 return -ENOMEM;
264 if (drm_gem_private_object_init(dev, &gtt->gem, size) != 0) 264
265 goto free_gtt; 265 drm_gem_private_object_init(dev, &gtt->gem, size);
266 if (drm_gem_handle_create(file, &gtt->gem, handle) == 0) 266 if (drm_gem_handle_create(file, &gtt->gem, handle) == 0)
267 return 0; 267 return 0;
268free_gtt: 268
269 drm_gem_object_release(&gtt->gem);
269 psb_gtt_free_range(dev, gtt); 270 psb_gtt_free_range(dev, gtt);
270 return -ENOMEM; 271 return -ENOMEM;
271} 272}
diff --git a/drivers/gpu/drm/i915/i915_gem_dmabuf.c b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
index dc53a527126b..f2e185c9038f 100644
--- a/drivers/gpu/drm/i915/i915_gem_dmabuf.c
+++ b/drivers/gpu/drm/i915/i915_gem_dmabuf.c
@@ -289,12 +289,7 @@ struct drm_gem_object *i915_gem_prime_import(struct drm_device *dev,
289 goto fail_detach; 289 goto fail_detach;
290 } 290 }
291 291
292 ret = drm_gem_private_object_init(dev, &obj->base, dma_buf->size); 292 drm_gem_private_object_init(dev, &obj->base, dma_buf->size);
293 if (ret) {
294 i915_gem_object_free(obj);
295 goto fail_detach;
296 }
297
298 i915_gem_object_init(obj, &i915_gem_object_dmabuf_ops); 293 i915_gem_object_init(obj, &i915_gem_object_dmabuf_ops);
299 obj->base.import_attach = attach; 294 obj->base.import_attach = attach;
300 295
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c b/drivers/gpu/drm/i915/i915_gem_stolen.c
index 5c1a535d5072..55218332e625 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -291,9 +291,7 @@ _i915_gem_object_create_stolen(struct drm_device *dev,
291 if (obj == NULL) 291 if (obj == NULL)
292 return NULL; 292 return NULL;
293 293
294 if (drm_gem_private_object_init(dev, &obj->base, stolen->size)) 294 drm_gem_private_object_init(dev, &obj->base, stolen->size);
295 goto cleanup;
296
297 i915_gem_object_init(obj, &i915_gem_object_stolen_ops); 295 i915_gem_object_init(obj, &i915_gem_object_stolen_ops);
298 296
299 obj->pages = i915_pages_create_for_stolen(dev, 297 obj->pages = i915_pages_create_for_stolen(dev,
diff --git a/drivers/gpu/drm/omapdrm/omap_gem.c b/drivers/gpu/drm/omapdrm/omap_gem.c
index ebbdf4132e9c..cbcd71e6ed83 100644
--- a/drivers/gpu/drm/omapdrm/omap_gem.c
+++ b/drivers/gpu/drm/omapdrm/omap_gem.c
@@ -1427,8 +1427,9 @@ struct drm_gem_object *omap_gem_new(struct drm_device *dev,
1427 omap_obj->height = gsize.tiled.height; 1427 omap_obj->height = gsize.tiled.height;
1428 } 1428 }
1429 1429
1430 ret = 0;
1430 if (flags & (OMAP_BO_DMA|OMAP_BO_EXT_MEM)) 1431 if (flags & (OMAP_BO_DMA|OMAP_BO_EXT_MEM))
1431 ret = drm_gem_private_object_init(dev, obj, size); 1432 drm_gem_private_object_init(dev, obj, size);
1432 else 1433 else
1433 ret = drm_gem_object_init(dev, obj, size); 1434 ret = drm_gem_object_init(dev, obj, size);
1434 1435
diff --git a/include/drm/drmP.h b/include/drm/drmP.h
index dd03fd4239ad..86f524338e03 100644
--- a/include/drm/drmP.h
+++ b/include/drm/drmP.h
@@ -1601,8 +1601,8 @@ struct drm_gem_object *drm_gem_object_alloc(struct drm_device *dev,
1601 size_t size); 1601 size_t size);
1602int drm_gem_object_init(struct drm_device *dev, 1602int drm_gem_object_init(struct drm_device *dev,
1603 struct drm_gem_object *obj, size_t size); 1603 struct drm_gem_object *obj, size_t size);
1604int drm_gem_private_object_init(struct drm_device *dev, 1604void drm_gem_private_object_init(struct drm_device *dev,
1605 struct drm_gem_object *obj, size_t size); 1605 struct drm_gem_object *obj, size_t size);
1606void drm_gem_object_handle_free(struct drm_gem_object *obj); 1606void drm_gem_object_handle_free(struct drm_gem_object *obj);
1607void drm_gem_vm_open(struct vm_area_struct *vma); 1607void drm_gem_vm_open(struct vm_area_struct *vma);
1608void drm_gem_vm_close(struct vm_area_struct *vma); 1608void drm_gem_vm_close(struct vm_area_struct *vma);