summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2013-01-08 12:15:04 -0800
committerEric Anholt <eric@anholt.net>2013-01-08 14:51:45 -0800
commitd0a69ef2f71306dd64a31cfe6d10b335b0a5d83f (patch)
tree87c5810a7313b2ced15e38d880d14a32fd38b5fc
parentcd6fef6a660c35bc109923ff64d5b393b80c1c6b (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.c57
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;