diff options
| -rw-r--r-- | drivers/gpu/drm/i915/i915_gem_tiling.c | 7 |
1 files changed, 4 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c index 7a24bd1a51f6..6377b22269ad 100644 --- a/drivers/gpu/drm/i915/i915_gem_tiling.c +++ b/drivers/gpu/drm/i915/i915_gem_tiling.c | |||
| @@ -335,9 +335,10 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, | |||
| 335 | return -EINVAL; | 335 | return -EINVAL; |
| 336 | } | 336 | } |
| 337 | 337 | ||
| 338 | mutex_lock(&dev->struct_mutex); | ||
| 338 | if (i915_gem_obj_is_pinned(obj) || obj->framebuffer_references) { | 339 | if (i915_gem_obj_is_pinned(obj) || obj->framebuffer_references) { |
| 339 | drm_gem_object_unreference_unlocked(&obj->base); | 340 | ret = -EBUSY; |
| 340 | return -EBUSY; | 341 | goto err; |
| 341 | } | 342 | } |
| 342 | 343 | ||
| 343 | if (args->tiling_mode == I915_TILING_NONE) { | 344 | if (args->tiling_mode == I915_TILING_NONE) { |
| @@ -369,7 +370,6 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, | |||
| 369 | } | 370 | } |
| 370 | } | 371 | } |
| 371 | 372 | ||
| 372 | mutex_lock(&dev->struct_mutex); | ||
| 373 | if (args->tiling_mode != obj->tiling_mode || | 373 | if (args->tiling_mode != obj->tiling_mode || |
| 374 | args->stride != obj->stride) { | 374 | args->stride != obj->stride) { |
| 375 | /* We need to rebind the object if its current allocation | 375 | /* We need to rebind the object if its current allocation |
| @@ -424,6 +424,7 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, | |||
| 424 | obj->bit_17 = NULL; | 424 | obj->bit_17 = NULL; |
| 425 | } | 425 | } |
| 426 | 426 | ||
| 427 | err: | ||
| 427 | drm_gem_object_unreference(&obj->base); | 428 | drm_gem_object_unreference(&obj->base); |
| 428 | mutex_unlock(&dev->struct_mutex); | 429 | mutex_unlock(&dev->struct_mutex); |
| 429 | 430 | ||
