aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c28
1 files changed, 23 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 3de62b0127a5..dfe7174a7c03 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -192,6 +192,18 @@ i915_gem_get_aperture_ioctl(struct drm_device *dev, void *data,
192 return 0; 192 return 0;
193} 193}
194 194
195void *i915_gem_object_alloc(struct drm_device *dev)
196{
197 struct drm_i915_private *dev_priv = dev->dev_private;
198 return kmem_cache_alloc(dev_priv->slab, GFP_KERNEL | __GFP_ZERO);
199}
200
201void i915_gem_object_free(struct drm_i915_gem_object *obj)
202{
203 struct drm_i915_private *dev_priv = obj->base.dev->dev_private;
204 kmem_cache_free(dev_priv->slab, obj);
205}
206
195static int 207static int
196i915_gem_create(struct drm_file *file, 208i915_gem_create(struct drm_file *file,
197 struct drm_device *dev, 209 struct drm_device *dev,
@@ -215,7 +227,7 @@ i915_gem_create(struct drm_file *file,
215 if (ret) { 227 if (ret) {
216 drm_gem_object_release(&obj->base); 228 drm_gem_object_release(&obj->base);
217 i915_gem_info_remove_obj(dev->dev_private, obj->base.size); 229 i915_gem_info_remove_obj(dev->dev_private, obj->base.size);
218 kfree(obj); 230 i915_gem_object_free(obj);
219 return ret; 231 return ret;
220 } 232 }
221 233
@@ -3695,12 +3707,12 @@ struct drm_i915_gem_object *i915_gem_alloc_object(struct drm_device *dev,
3695 struct address_space *mapping; 3707 struct address_space *mapping;
3696 u32 mask; 3708 u32 mask;
3697 3709
3698 obj = kzalloc(sizeof(*obj), GFP_KERNEL); 3710 obj = i915_gem_object_alloc(dev);
3699 if (obj == NULL) 3711 if (obj == NULL)
3700 return NULL; 3712 return NULL;
3701 3713
3702 if (drm_gem_object_init(dev, &obj->base, size) != 0) { 3714 if (drm_gem_object_init(dev, &obj->base, size) != 0) {
3703 kfree(obj); 3715 i915_gem_object_free(obj);
3704 return NULL; 3716 return NULL;
3705 } 3717 }
3706 3718
@@ -3783,7 +3795,7 @@ void i915_gem_free_object(struct drm_gem_object *gem_obj)
3783 i915_gem_info_remove_obj(dev_priv, obj->base.size); 3795 i915_gem_info_remove_obj(dev_priv, obj->base.size);
3784 3796
3785 kfree(obj->bit_17); 3797 kfree(obj->bit_17);
3786 kfree(obj); 3798 i915_gem_object_free(obj);
3787} 3799}
3788 3800
3789int 3801int
@@ -4101,8 +4113,14 @@ init_ring_lists(struct intel_ring_buffer *ring)
4101void 4113void
4102i915_gem_load(struct drm_device *dev) 4114i915_gem_load(struct drm_device *dev)
4103{ 4115{
4104 int i;
4105 drm_i915_private_t *dev_priv = dev->dev_private; 4116 drm_i915_private_t *dev_priv = dev->dev_private;
4117 int i;
4118
4119 dev_priv->slab =
4120 kmem_cache_create("i915_gem_object",
4121 sizeof(struct drm_i915_gem_object), 0,
4122 SLAB_HWCACHE_ALIGN,
4123 NULL);
4106 4124
4107 INIT_LIST_HEAD(&dev_priv->mm.active_list); 4125 INIT_LIST_HEAD(&dev_priv->mm.active_list);
4108 INIT_LIST_HEAD(&dev_priv->mm.inactive_list); 4126 INIT_LIST_HEAD(&dev_priv->mm.inactive_list);