summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2014-09-08 09:02:49 +0200
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-09-12 17:09:24 +0200
commit3bd33023f122c16ecbf8a2a74903df52dbce5690 (patch)
treee5d66b0ca42a67eb7d2e11b52193c12494601386
parent3193e3694f7eba5b093bd38673a4228835f5f3f1 (diff)
drm: Drop modeset locking from crtc init functiontopic/core-stuff-2014-09-12
At driver init no one can access modeset objects and we're single-threaded. So locking is just cargo-culting here. Worse, with the new ww mutexes and ww mutex slowpath debugging the mutex_lock might actually fail, and we don't have the full-blown ww recovery dance. Which then leads to fireworks when we try to unlock the not-locked crtc lock. An audit of all the functions called from here shows that none of them contain locking checks, so there's also no reason to keep the locking around just for consistency of caller contexts. Besides that I have the rule (at least in i915) that such places where we take locks just to simplify locking checks and not for correctness always require a comment. This regression was introduced in commit 51fd371bbaf94018a1223b4e2cf20b9880fd92d4 Author: Rob Clark <robdclark@gmail.com> Date: Tue Nov 19 12:10:12 2013 -0500 drm: convert crtc and connection_mutex to ww_mutex (v5) v2: Don't drop the lock_init call, spotted by the 0day builder. Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=83341 Cc: Rob Clark <robdclark@gmail.com> Cc: thellstrom@vmware.com Cc: maarten.lankhorst@canonical.com Signed-off-by: Daniel Vetter <daniel.vetter@intel.com>
-rw-r--r--drivers/gpu/drm/drm_crtc.c5
1 files changed, 0 insertions, 5 deletions
diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index e2f4b8c21440..b1271a8d8ce7 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -679,11 +679,7 @@ int drm_crtc_init_with_planes(struct drm_device *dev, struct drm_crtc *crtc,
crtc->funcs = funcs;
crtc->invert_dimensions = false;
- drm_modeset_lock_all(dev);
drm_modeset_lock_init(&crtc->mutex);
- /* dropped by _unlock_all(): */
- drm_modeset_lock(&crtc->mutex, config->acquire_ctx);
-
ret = drm_mode_object_get(dev, &crtc->base, DRM_MODE_OBJECT_CRTC);
if (ret)
goto out;
@@ -701,7 +697,6 @@ int drm_crtc_init_with_planes(struct drm_device *dev, struct drm_crtc *crtc,
cursor->possible_crtcs = 1 << drm_crtc_index(crtc);
out:
- drm_modeset_unlock_all(dev);
return ret;
}