|
@@ -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)
|
|
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);
|
|
struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
|
|
|
|
|
|
drm_framebuffer_cleanup(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);
|
|
i915_gem_object_put(intel_fb->obj);
|
|
- mutex_unlock(&dev->struct_mutex);
|
|
|
|
|
|
+
|
|
kfree(intel_fb);
|
|
kfree(intel_fb);
|
|
}
|
|
}
|
|
|
|
|
|
@@ -14509,7 +14508,7 @@ static int intel_framebuffer_init(struct drm_device *dev,
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
- intel_fb->obj->framebuffer_references++;
|
|
|
|
|
|
+ atomic_inc(&intel_fb->obj->framebuffer_references);
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|