diff options
Diffstat (limited to 'drivers/gpu/drm')
| -rw-r--r-- | drivers/gpu/drm/drm_crtc_helper.c | 31 |
1 files changed, 12 insertions, 19 deletions
diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c index ae2fd5cd8dfa..44d50f56afa3 100644 --- a/drivers/gpu/drm/drm_crtc_helper.c +++ b/drivers/gpu/drm/drm_crtc_helper.c | |||
| @@ -105,9 +105,6 @@ static void drm_mode_validate_flag(struct drm_connector *connector, | |||
| 105 | * @maxX: max width for modes | 105 | * @maxX: max width for modes |
| 106 | * @maxY: max height for modes | 106 | * @maxY: max height for modes |
| 107 | * | 107 | * |
| 108 | * LOCKING: | ||
| 109 | * Caller must hold mode config lock. | ||
| 110 | * | ||
| 111 | * Based on the helper callbacks implemented by @connector try to detect all | 108 | * Based on the helper callbacks implemented by @connector try to detect all |
| 112 | * valid modes. Modes will first be added to the connector's probed_modes list, | 109 | * valid modes. Modes will first be added to the connector's probed_modes list, |
| 113 | * then culled (based on validity and the @maxX, @maxY parameters) and put into | 110 | * then culled (based on validity and the @maxX, @maxY parameters) and put into |
| @@ -131,6 +128,8 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector, | |||
| 131 | int mode_flags = 0; | 128 | int mode_flags = 0; |
| 132 | bool verbose_prune = true; | 129 | bool verbose_prune = true; |
| 133 | 130 | ||
| 131 | WARN_ON(!mutex_is_locked(&dev->mode_config.mutex)); | ||
| 132 | |||
| 134 | DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", connector->base.id, | 133 | DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", connector->base.id, |
| 135 | drm_get_connector_name(connector)); | 134 | drm_get_connector_name(connector)); |
| 136 | /* set all modes to the unverified state */ | 135 | /* set all modes to the unverified state */ |
| @@ -218,9 +217,6 @@ EXPORT_SYMBOL(drm_helper_probe_single_connector_modes); | |||
| 218 | * drm_helper_encoder_in_use - check if a given encoder is in use | 217 | * drm_helper_encoder_in_use - check if a given encoder is in use |
| 219 | * @encoder: encoder to check | 218 | * @encoder: encoder to check |
| 220 | * | 219 | * |
| 221 | * LOCKING: | ||
| 222 | * Caller must hold mode config lock. | ||
| 223 | * | ||
| 224 | * Walk @encoders's DRM device's mode_config and see if it's in use. | 220 | * Walk @encoders's DRM device's mode_config and see if it's in use. |
| 225 | * | 221 | * |
| 226 | * RETURNS: | 222 | * RETURNS: |
| @@ -230,6 +226,8 @@ bool drm_helper_encoder_in_use(struct drm_encoder *encoder) | |||
| 230 | { | 226 | { |
| 231 | struct drm_connector *connector; | 227 | struct drm_connector *connector; |
| 232 | struct drm_device *dev = encoder->dev; | 228 | struct drm_device *dev = encoder->dev; |
| 229 | |||
| 230 | WARN_ON(!mutex_is_locked(&dev->mode_config.mutex)); | ||
| 233 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) | 231 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) |
| 234 | if (connector->encoder == encoder) | 232 | if (connector->encoder == encoder) |
| 235 | return true; | 233 | return true; |
| @@ -241,9 +239,6 @@ EXPORT_SYMBOL(drm_helper_encoder_in_use); | |||
| 241 | * drm_helper_crtc_in_use - check if a given CRTC is in a mode_config | 239 | * drm_helper_crtc_in_use - check if a given CRTC is in a mode_config |
| 242 | * @crtc: CRTC to check | 240 | * @crtc: CRTC to check |
| 243 | * | 241 | * |
| 244 | * LOCKING: | ||
| 245 | * Caller must hold mode config lock. | ||
| 246 | * | ||
| 247 | * Walk @crtc's DRM device's mode_config and see if it's in use. | 242 | * Walk @crtc's DRM device's mode_config and see if it's in use. |
| 248 | * | 243 | * |
| 249 | * RETURNS: | 244 | * RETURNS: |
| @@ -253,7 +248,8 @@ bool drm_helper_crtc_in_use(struct drm_crtc *crtc) | |||
| 253 | { | 248 | { |
| 254 | struct drm_encoder *encoder; | 249 | struct drm_encoder *encoder; |
| 255 | struct drm_device *dev = crtc->dev; | 250 | struct drm_device *dev = crtc->dev; |
| 256 | /* FIXME: Locking around list access? */ | 251 | |
| 252 | WARN_ON(!mutex_is_locked(&dev->mode_config.mutex)); | ||
| 257 | list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) | 253 | list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) |
| 258 | if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder)) | 254 | if (encoder->crtc == crtc && drm_helper_encoder_in_use(encoder)) |
| 259 | return true; | 255 | return true; |
| @@ -282,9 +278,6 @@ drm_encoder_disable(struct drm_encoder *encoder) | |||
| 282 | * drm_helper_disable_unused_functions - disable unused objects | 278 | * drm_helper_disable_unused_functions - disable unused objects |
| 283 | * @dev: DRM device | 279 | * @dev: DRM device |
| 284 | * | 280 | * |
| 285 | * LOCKING: | ||
| 286 | * Caller must hold mode config lock. | ||
| 287 | * | ||
| 288 | * If an connector or CRTC isn't part of @dev's mode_config, it can be disabled | 281 | * If an connector or CRTC isn't part of @dev's mode_config, it can be disabled |
| 289 | * by calling its dpms function, which should power it off. | 282 | * by calling its dpms function, which should power it off. |
| 290 | */ | 283 | */ |
| @@ -294,6 +287,8 @@ void drm_helper_disable_unused_functions(struct drm_device *dev) | |||
| 294 | struct drm_connector *connector; | 287 | struct drm_connector *connector; |
| 295 | struct drm_crtc *crtc; | 288 | struct drm_crtc *crtc; |
| 296 | 289 | ||
| 290 | drm_warn_on_modeset_not_all_locked(dev); | ||
| 291 | |||
| 297 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { | 292 | list_for_each_entry(connector, &dev->mode_config.connector_list, head) { |
| 298 | if (!connector->encoder) | 293 | if (!connector->encoder) |
| 299 | continue; | 294 | continue; |
| @@ -354,9 +349,6 @@ drm_crtc_prepare_encoders(struct drm_device *dev) | |||
| 354 | * @y: vertical offset into the surface | 349 | * @y: vertical offset into the surface |
| 355 | * @old_fb: old framebuffer, for cleanup | 350 | * @old_fb: old framebuffer, for cleanup |
| 356 | * | 351 | * |
| 357 | * LOCKING: | ||
| 358 | * Caller must hold mode config lock. | ||
| 359 | * | ||
| 360 | * Try to set @mode on @crtc. Give @crtc and its associated connectors a chance | 352 | * Try to set @mode on @crtc. Give @crtc and its associated connectors a chance |
| 361 | * to fixup or reject the mode prior to trying to set it. This is an internal | 353 | * to fixup or reject the mode prior to trying to set it. This is an internal |
| 362 | * helper that drivers could e.g. use to update properties that require the | 354 | * helper that drivers could e.g. use to update properties that require the |
| @@ -383,6 +375,8 @@ bool drm_crtc_helper_set_mode(struct drm_crtc *crtc, | |||
| 383 | struct drm_encoder *encoder; | 375 | struct drm_encoder *encoder; |
| 384 | bool ret = true; | 376 | bool ret = true; |
| 385 | 377 | ||
| 378 | drm_warn_on_modeset_not_all_locked(dev); | ||
| 379 | |||
| 386 | saved_enabled = crtc->enabled; | 380 | saved_enabled = crtc->enabled; |
| 387 | crtc->enabled = drm_helper_crtc_in_use(crtc); | 381 | crtc->enabled = drm_helper_crtc_in_use(crtc); |
| 388 | if (!crtc->enabled) | 382 | if (!crtc->enabled) |
| @@ -559,9 +553,6 @@ drm_crtc_helper_disable(struct drm_crtc *crtc) | |||
| 559 | * drm_crtc_helper_set_config - set a new config from userspace | 553 | * drm_crtc_helper_set_config - set a new config from userspace |
| 560 | * @set: mode set configuration | 554 | * @set: mode set configuration |
| 561 | * | 555 | * |
| 562 | * LOCKING: | ||
| 563 | * Caller must hold mode config lock. | ||
| 564 | * | ||
| 565 | * Setup a new configuration, provided by the upper layers (either an ioctl call | 556 | * Setup a new configuration, provided by the upper layers (either an ioctl call |
| 566 | * from userspace or internally e.g. from the fbdev suppport code) in @set, and | 557 | * from userspace or internally e.g. from the fbdev suppport code) in @set, and |
| 567 | * enable it. This is the main helper functions for drivers that implement | 558 | * enable it. This is the main helper functions for drivers that implement |
| @@ -611,6 +602,8 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set) | |||
| 611 | 602 | ||
| 612 | dev = set->crtc->dev; | 603 | dev = set->crtc->dev; |
| 613 | 604 | ||
| 605 | drm_warn_on_modeset_not_all_locked(dev); | ||
| 606 | |||
| 614 | /* | 607 | /* |
| 615 | * Allocate space for the backup of all (non-pointer) encoder and | 608 | * Allocate space for the backup of all (non-pointer) encoder and |
| 616 | * connector data. | 609 | * connector data. |
