diff options
author | Rob Clark <robdclark@gmail.com> | 2013-11-19 12:10:12 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2014-06-04 19:54:33 -0400 |
commit | 51fd371bbaf94018a1223b4e2cf20b9880fd92d4 (patch) | |
tree | e86e8ec3ace2fd61111105d39f5eb2d37378e9a8 /drivers/gpu/drm/i915/intel_dp.c | |
parent | 4f71d0cb76339a10fd445b0b281acc45c71b6271 (diff) |
drm: convert crtc and connection_mutex to ww_mutex (v5)
For atomic, it will be quite necessary to not need to care so much
about locking order. And 'state' gives us a convenient place to stash a
ww_ctx for any sort of update that needs to grab multiple crtc locks.
Because we will want to eventually make locking even more fine grained
(giving locks to planes, connectors, etc), split out drm_modeset_lock
and drm_modeset_acquire_ctx to track acquired locks.
Atomic will use this to keep track of which locks have been acquired
in a transaction.
v1: original
v2: remove a few things not needed until atomic, for now
v3: update for v3 of connection_mutex patch..
v4: squash in docbook
v5: doc tweaks/fixes
Signed-off-by: Rob Clark <robdclark@gmail.com>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 14 |
1 files changed, 7 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index d01bb430b5bc..2d5d9b010073 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -1154,7 +1154,7 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp) | |||
1154 | u32 pp; | 1154 | u32 pp; |
1155 | u32 pp_stat_reg, pp_ctrl_reg; | 1155 | u32 pp_stat_reg, pp_ctrl_reg; |
1156 | 1156 | ||
1157 | WARN_ON(!mutex_is_locked(&dev->mode_config.connection_mutex)); | 1157 | WARN_ON(!drm_modeset_is_locked(&dev->mode_config.connection_mutex)); |
1158 | 1158 | ||
1159 | if (!intel_dp->want_panel_vdd && edp_have_panel_vdd(intel_dp)) { | 1159 | if (!intel_dp->want_panel_vdd && edp_have_panel_vdd(intel_dp)) { |
1160 | struct intel_digital_port *intel_dig_port = | 1160 | struct intel_digital_port *intel_dig_port = |
@@ -1191,9 +1191,9 @@ static void edp_panel_vdd_work(struct work_struct *__work) | |||
1191 | struct intel_dp, panel_vdd_work); | 1191 | struct intel_dp, panel_vdd_work); |
1192 | struct drm_device *dev = intel_dp_to_dev(intel_dp); | 1192 | struct drm_device *dev = intel_dp_to_dev(intel_dp); |
1193 | 1193 | ||
1194 | mutex_lock(&dev->mode_config.connection_mutex); | 1194 | drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); |
1195 | edp_panel_vdd_off_sync(intel_dp); | 1195 | edp_panel_vdd_off_sync(intel_dp); |
1196 | mutex_unlock(&dev->mode_config.connection_mutex); | 1196 | drm_modeset_unlock(&dev->mode_config.connection_mutex); |
1197 | } | 1197 | } |
1198 | 1198 | ||
1199 | static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync) | 1199 | static void edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync) |
@@ -3666,9 +3666,9 @@ void intel_dp_encoder_destroy(struct drm_encoder *encoder) | |||
3666 | drm_encoder_cleanup(encoder); | 3666 | drm_encoder_cleanup(encoder); |
3667 | if (is_edp(intel_dp)) { | 3667 | if (is_edp(intel_dp)) { |
3668 | cancel_delayed_work_sync(&intel_dp->panel_vdd_work); | 3668 | cancel_delayed_work_sync(&intel_dp->panel_vdd_work); |
3669 | mutex_lock(&dev->mode_config.connection_mutex); | 3669 | drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); |
3670 | edp_panel_vdd_off_sync(intel_dp); | 3670 | edp_panel_vdd_off_sync(intel_dp); |
3671 | mutex_unlock(&dev->mode_config.connection_mutex); | 3671 | drm_modeset_unlock(&dev->mode_config.connection_mutex); |
3672 | } | 3672 | } |
3673 | kfree(intel_dig_port); | 3673 | kfree(intel_dig_port); |
3674 | } | 3674 | } |
@@ -4247,9 +4247,9 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port, | |||
4247 | drm_dp_aux_unregister(&intel_dp->aux); | 4247 | drm_dp_aux_unregister(&intel_dp->aux); |
4248 | if (is_edp(intel_dp)) { | 4248 | if (is_edp(intel_dp)) { |
4249 | cancel_delayed_work_sync(&intel_dp->panel_vdd_work); | 4249 | cancel_delayed_work_sync(&intel_dp->panel_vdd_work); |
4250 | mutex_lock(&dev->mode_config.connection_mutex); | 4250 | drm_modeset_lock(&dev->mode_config.connection_mutex, NULL); |
4251 | edp_panel_vdd_off_sync(intel_dp); | 4251 | edp_panel_vdd_off_sync(intel_dp); |
4252 | mutex_unlock(&dev->mode_config.connection_mutex); | 4252 | drm_modeset_unlock(&dev->mode_config.connection_mutex); |
4253 | } | 4253 | } |
4254 | drm_sysfs_connector_remove(connector); | 4254 | drm_sysfs_connector_remove(connector); |
4255 | drm_connector_cleanup(connector); | 4255 | drm_connector_cleanup(connector); |