diff options
author | Eric Anholt <eric@anholt.net> | 2013-01-08 11:52:55 -0800 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2013-01-08 14:51:36 -0800 |
commit | 50d0324f3f124b1a0bed2b8d137c6c26287eff00 (patch) | |
tree | 640b2b49b1b169586c063e56cd79f0e7bc5de706 | |
parent | 4fb9377a357348d7e1a469d0febcad311236163f (diff) |
drm/i915: Hold the table lock across all our object lookups in execbuf.
Signed-off-by: Eric Anholt <eric@anholt.net>
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_execbuffer.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c index 6cd3e1c1629..f7084ec95fd 100644 --- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c +++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c @@ -551,8 +551,8 @@ 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(dev, file, - exec[i].handle)); + obj = to_intel_bo(drm_gem_object_lookup_locked(file, + exec[i].handle)); if (&obj->base == NULL) { DRM_DEBUG("Invalid object handle %d at index %d\n", exec[i].handle, i); @@ -869,12 +869,13 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, } /* Look up object handles */ + mutex_lock(&file->table_lock); INIT_LIST_HEAD(&objects); for (i = 0; i < args->buffer_count; i++) { struct drm_i915_gem_object *obj; - obj = to_intel_bo(drm_gem_object_lookup(dev, file, - exec[i].handle)); + obj = to_intel_bo(drm_gem_object_lookup_locked(file, + exec[i].handle)); if (&obj->base == NULL) { DRM_DEBUG("Invalid object handle %d at index %d\n", exec[i].handle, i); @@ -993,6 +994,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data, i915_gem_execbuffer_retire_commands(dev, file, ring); err: + mutex_unlock(&file->table_lock); eb_destroy(eb); while (!list_empty(&objects)) { struct drm_i915_gem_object *obj; |