diff options
author | Dave Airlie <airlied@redhat.com> | 2010-02-24 22:39:29 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2010-02-24 22:39:29 -0500 |
commit | de19322d554fd0f449d17610823c38494c06db9e (patch) | |
tree | df91899c274005adb02a7a8ca5d9e5609bc2d05b /drivers/gpu/drm/i915 | |
parent | 60b341b778cc2929df16c0a504c91621b3c6a4ad (diff) | |
parent | 290e55056ec3d25c72088628245d8cae037b30db (diff) |
Merge remote branch 'korg/drm-core-next' into drm-next-stage
* korg/drm-core-next:
drm/ttm: handle OOM in ttm_tt_swapout
drm/radeon/kms/atom: fix shr/shl ops
drm/kms: fix spelling of "CLOCK"
drm/kms: fix fb_changed = true else statement
drivers/gpu/drm/drm_fb_helper.c: don't use private implementation of atoi()
drm: switch all GEM/KMS ioctls to unlocked ioctl status.
Use drm_gem_object_[handle_]unreference_unlocked where possible
drm: introduce drm_gem_object_[handle_]unreference_unlocked
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_tiling.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 13 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_overlay.c | 2 |
4 files changed, 12 insertions, 23 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index ec8a0d7ffa39..9d87d5a41bdc 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -128,9 +128,7 @@ i915_gem_create_ioctl(struct drm_device *dev, void *data, | |||
128 | return -ENOMEM; | 128 | return -ENOMEM; |
129 | 129 | ||
130 | ret = drm_gem_handle_create(file_priv, obj, &handle); | 130 | ret = drm_gem_handle_create(file_priv, obj, &handle); |
131 | mutex_lock(&dev->struct_mutex); | 131 | drm_gem_object_handle_unreference_unlocked(obj); |
132 | drm_gem_object_handle_unreference(obj); | ||
133 | mutex_unlock(&dev->struct_mutex); | ||
134 | 132 | ||
135 | if (ret) | 133 | if (ret) |
136 | return ret; | 134 | return ret; |
@@ -488,7 +486,7 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data, | |||
488 | */ | 486 | */ |
489 | if (args->offset > obj->size || args->size > obj->size || | 487 | if (args->offset > obj->size || args->size > obj->size || |
490 | args->offset + args->size > obj->size) { | 488 | args->offset + args->size > obj->size) { |
491 | drm_gem_object_unreference(obj); | 489 | drm_gem_object_unreference_unlocked(obj); |
492 | return -EINVAL; | 490 | return -EINVAL; |
493 | } | 491 | } |
494 | 492 | ||
@@ -501,7 +499,7 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data, | |||
501 | file_priv); | 499 | file_priv); |
502 | } | 500 | } |
503 | 501 | ||
504 | drm_gem_object_unreference(obj); | 502 | drm_gem_object_unreference_unlocked(obj); |
505 | 503 | ||
506 | return ret; | 504 | return ret; |
507 | } | 505 | } |
@@ -961,7 +959,7 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, | |||
961 | */ | 959 | */ |
962 | if (args->offset > obj->size || args->size > obj->size || | 960 | if (args->offset > obj->size || args->size > obj->size || |
963 | args->offset + args->size > obj->size) { | 961 | args->offset + args->size > obj->size) { |
964 | drm_gem_object_unreference(obj); | 962 | drm_gem_object_unreference_unlocked(obj); |
965 | return -EINVAL; | 963 | return -EINVAL; |
966 | } | 964 | } |
967 | 965 | ||
@@ -995,7 +993,7 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, | |||
995 | DRM_INFO("pwrite failed %d\n", ret); | 993 | DRM_INFO("pwrite failed %d\n", ret); |
996 | #endif | 994 | #endif |
997 | 995 | ||
998 | drm_gem_object_unreference(obj); | 996 | drm_gem_object_unreference_unlocked(obj); |
999 | 997 | ||
1000 | return ret; | 998 | return ret; |
1001 | } | 999 | } |
@@ -1138,9 +1136,7 @@ i915_gem_mmap_ioctl(struct drm_device *dev, void *data, | |||
1138 | PROT_READ | PROT_WRITE, MAP_SHARED, | 1136 | PROT_READ | PROT_WRITE, MAP_SHARED, |
1139 | args->offset); | 1137 | args->offset); |
1140 | up_write(¤t->mm->mmap_sem); | 1138 | up_write(¤t->mm->mmap_sem); |
1141 | mutex_lock(&dev->struct_mutex); | 1139 | drm_gem_object_unreference_unlocked(obj); |
1142 | drm_gem_object_unreference(obj); | ||
1143 | mutex_unlock(&dev->struct_mutex); | ||
1144 | if (IS_ERR((void *)addr)) | 1140 | if (IS_ERR((void *)addr)) |
1145 | return addr; | 1141 | return addr; |
1146 | 1142 | ||
diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c index df278b2685bf..137e888427f1 100644 --- a/drivers/gpu/drm/i915/i915_gem_tiling.c +++ b/drivers/gpu/drm/i915/i915_gem_tiling.c | |||
@@ -438,9 +438,7 @@ i915_gem_set_tiling(struct drm_device *dev, void *data, | |||
438 | obj_priv = obj->driver_private; | 438 | obj_priv = obj->driver_private; |
439 | 439 | ||
440 | if (!i915_tiling_ok(dev, args->stride, obj->size, args->tiling_mode)) { | 440 | if (!i915_tiling_ok(dev, args->stride, obj->size, args->tiling_mode)) { |
441 | mutex_lock(&dev->struct_mutex); | 441 | drm_gem_object_unreference_unlocked(obj); |
442 | drm_gem_object_unreference(obj); | ||
443 | mutex_unlock(&dev->struct_mutex); | ||
444 | return -EINVAL; | 442 | return -EINVAL; |
445 | } | 443 | } |
446 | 444 | ||
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index b27202d23ebc..c8fd15f146af 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -3553,11 +3553,10 @@ static int intel_crtc_cursor_set(struct drm_crtc *crtc, | |||
3553 | intel_crtc->cursor_bo = bo; | 3553 | intel_crtc->cursor_bo = bo; |
3554 | 3554 | ||
3555 | return 0; | 3555 | return 0; |
3556 | fail: | ||
3557 | mutex_lock(&dev->struct_mutex); | ||
3558 | fail_locked: | 3556 | fail_locked: |
3559 | drm_gem_object_unreference(bo); | ||
3560 | mutex_unlock(&dev->struct_mutex); | 3557 | mutex_unlock(&dev->struct_mutex); |
3558 | fail: | ||
3559 | drm_gem_object_unreference_unlocked(bo); | ||
3561 | return ret; | 3560 | return ret; |
3562 | } | 3561 | } |
3563 | 3562 | ||
@@ -4476,9 +4475,7 @@ static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb) | |||
4476 | intelfb_remove(dev, fb); | 4475 | intelfb_remove(dev, fb); |
4477 | 4476 | ||
4478 | drm_framebuffer_cleanup(fb); | 4477 | drm_framebuffer_cleanup(fb); |
4479 | mutex_lock(&dev->struct_mutex); | 4478 | drm_gem_object_unreference_unlocked(intel_fb->obj); |
4480 | drm_gem_object_unreference(intel_fb->obj); | ||
4481 | mutex_unlock(&dev->struct_mutex); | ||
4482 | 4479 | ||
4483 | kfree(intel_fb); | 4480 | kfree(intel_fb); |
4484 | } | 4481 | } |
@@ -4541,9 +4538,7 @@ intel_user_framebuffer_create(struct drm_device *dev, | |||
4541 | 4538 | ||
4542 | ret = intel_framebuffer_create(dev, mode_cmd, &fb, obj); | 4539 | ret = intel_framebuffer_create(dev, mode_cmd, &fb, obj); |
4543 | if (ret) { | 4540 | if (ret) { |
4544 | mutex_lock(&dev->struct_mutex); | 4541 | drm_gem_object_unreference_unlocked(obj); |
4545 | drm_gem_object_unreference(obj); | ||
4546 | mutex_unlock(&dev->struct_mutex); | ||
4547 | return NULL; | 4542 | return NULL; |
4548 | } | 4543 | } |
4549 | 4544 | ||
diff --git a/drivers/gpu/drm/i915/intel_overlay.c b/drivers/gpu/drm/i915/intel_overlay.c index 2639591c72e9..1b50d61c5aaa 100644 --- a/drivers/gpu/drm/i915/intel_overlay.c +++ b/drivers/gpu/drm/i915/intel_overlay.c | |||
@@ -1179,7 +1179,7 @@ int intel_overlay_put_image(struct drm_device *dev, void *data, | |||
1179 | out_unlock: | 1179 | out_unlock: |
1180 | mutex_unlock(&dev->struct_mutex); | 1180 | mutex_unlock(&dev->struct_mutex); |
1181 | mutex_unlock(&dev->mode_config.mutex); | 1181 | mutex_unlock(&dev->mode_config.mutex); |
1182 | drm_gem_object_unreference(new_bo); | 1182 | drm_gem_object_unreference_unlocked(new_bo); |
1183 | kfree(params); | 1183 | kfree(params); |
1184 | 1184 | ||
1185 | return ret; | 1185 | return ret; |