summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
authorChris Wilson2017-02-16 10:46:21 +0100
committerChris Wilson2017-02-16 21:31:13 +0100
commit70001cd256548391add796cce40bd2e2394d4297 (patch)
treeb4b6e3b0f1b860710ee65e6c208b49fb0ce0032a /drivers/gpu/drm/i915/intel_display.c
parentdrm/i915: Unwind conversion to i915_gem_phys_ops on failure (diff)
downloadkernel-qcow2-linux-70001cd256548391add796cce40bd2e2394d4297.tar.gz
kernel-qcow2-linux-70001cd256548391add796cce40bd2e2394d4297.tar.xz
kernel-qcow2-linux-70001cd256548391add796cce40bd2e2394d4297.zip
drm/i915: Remove struct_mutex for destroying framebuffers
We do not need to hold struct_mutex for destroying drm_i915_gem_objects any longer, and with a little care taken over tracking obj->framebuffer_references, we can relinquish BKL locking around the destroy of intel_framebuffer. v2: Use atomic check for WARN_ON framebuffer miscounting Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170216094621.3426-1-chris@chris-wilson.co.uk Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 660581fb329a..e483540d2439 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -14265,14 +14265,13 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)
static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb)
{
- struct drm_device *dev = fb->dev;
struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
drm_framebuffer_cleanup(fb);
- mutex_lock(&dev->struct_mutex);
- WARN_ON(!intel_fb->obj->framebuffer_references--);
+
+ WARN_ON(atomic_dec_return(&intel_fb->obj->framebuffer_references) < 0);
i915_gem_object_put(intel_fb->obj);
- mutex_unlock(&dev->struct_mutex);
+
kfree(intel_fb);
}
@@ -14509,7 +14508,7 @@ static int intel_framebuffer_init(struct drm_device *dev,
return ret;
}
- intel_fb->obj->framebuffer_references++;
+ atomic_inc(&intel_fb->obj->framebuffer_references);
return 0;
}