diff options
author | Eric Anholt <eric@anholt.net> | 2013-01-08 12:15:04 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2013-01-08 14:51:45 -0800 |
commit | d0a69ef2f71306dd64a31cfe6d10b335b0a5d83f (patch) | |
tree | 87c5810a7313b2ced15e38d880d14a32fd38b5fc | |
parent | cd6fef6a660c35bc109923ff64d5b393b80c1c6b (diff) |
drm/i915: Remove the temporary eb hash table.
This was used to work around the overhead of locking file->table_lock,
but now that that's a mutex we don't need to bother any more.
Signed-off-by: Eric Anholt <eric@anholt.net>
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_execbuffer.c | 57 |
1 files changed, 1 insertions, 56 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 3855b61970a..23a8a51a7ea 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -33,48 +33,6 @@ #include "intel_drv.h" #include <linux/dma_remapping.h> -struct eb_objects { - int and; - struct hlist_head buckets[0]; -}; - -static struct eb_objects * -eb_create(int size) -{ - struct eb_objects *eb; - int count = PAGE_SIZE / sizeof(struct hlist_head) / 2; - BUILD_BUG_ON(!is_power_of_2(PAGE_SIZE / sizeof(struct hlist_head))); - while (count > size) - count >>= 1; - eb = kzalloc(count*sizeof(struct hlist_head) + - sizeof(struct eb_objects), - GFP_KERNEL); - if (eb == NULL) - return eb; - - eb->and = count - 1; - return eb; -} - -static void -eb_reset(struct eb_objects *eb) -{ - memset(eb->buckets, 0, (eb->and+1)*sizeof(struct hlist_head)); -} - -static void -eb_add_object(struct eb_objects *eb, struct drm_i915_gem_object *obj) -{ - hlist_add_head(&obj->exec_node, - &eb->buckets[obj->exec_handle & eb->and]); -} - -static void -eb_destroy(struct eb_objects *eb) -{ - kfree(eb); -} - static inline int use_cpu_reloc(struct drm_i915_gem_object *obj) { return (obj->base.write_domain == I915_GEM_DOMAIN_CPU || @@ -477,7 +435,6 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev, struct drm_file *file, struct intel_ring_buffer *ring, struct list_head *objects, - struct eb_objects *eb, struct drm_i915_gem_exec_object2 *exec, int count) { @@ -534,7 +491,6 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev, } /* reacquire the objects */ - eb_reset(eb); for (i = 0; i < count; i++) { obj = to_intel_bo(drm_gem_object_lookup_locked(file, exec[i].handle)); @@ -548,7 +504,6 @@ i915_gem_execbuffer_relocate_slow(struct drm_device *dev, list_add_tail(&obj->exec_list, objects); obj->exec_handle = exec[i].handle; obj->exec_entry = &exec[i]; - eb_add_object(eb, obj); } ret = i915_gem_execbuffer_reserve(ring, file, objects); @@ -714,7 +669,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, { drm_i915_private_t *dev_priv = dev->dev_private; struct list_head objects; - struct eb_objects *eb; struct drm_i915_gem_object *batch_obj; struct drm_clip_rect *cliprects = NULL; struct intel_ring_buffer *ring; @@ -846,13 +800,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, goto pre_mutex_err; } - eb = eb_create(args->buffer_count); - if (eb == NULL) { - mutex_unlock(&dev->struct_mutex); - ret = -ENOMEM; - goto pre_mutex_err; - } - /* Look up object handles */ mutex_lock(&file->table_lock); INIT_LIST_HEAD(&objects); @@ -879,7 +826,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, list_add_tail(&obj->exec_list, &objects); obj->exec_handle = exec[i].handle; obj->exec_entry = &exec[i]; - eb_add_object(eb, obj); } /* take note of the batch buffer before we might reorder the lists */ @@ -897,7 +843,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, if (ret) { if (ret == -EFAULT) { ret = i915_gem_execbuffer_relocate_slow(dev, file, ring, - &objects, eb, + &objects, exec, args->buffer_count); BUG_ON(!mutex_is_locked(&dev->struct_mutex)); @@ -980,7 +926,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, err: mutex_unlock(&file->table_lock); - eb_destroy(eb); while (!list_empty(&objects)) { struct drm_i915_gem_object *obj; |