]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - drivers/gpu/drm/drm_atomic.c
drm: locking&new iterators for connector_list
[mirror_ubuntu-hirsute-kernel.git] / drivers / gpu / drm / drm_atomic.c
index ff38592134f5cd189eeef5cc5e180a0cfe2ad987..b1b54011a92c90c3197a1aa82940007e90c9ec2d 100644 (file)
@@ -1417,6 +1417,7 @@ drm_atomic_add_affected_connectors(struct drm_atomic_state *state,
        struct drm_mode_config *config = &state->dev->mode_config;
        struct drm_connector *connector;
        struct drm_connector_state *conn_state;
+       struct drm_connector_list_iter conn_iter;
        int ret;
 
        ret = drm_modeset_lock(&config->connection_mutex, state->acquire_ctx);
@@ -1430,14 +1431,18 @@ drm_atomic_add_affected_connectors(struct drm_atomic_state *state,
         * Changed connectors are already in @state, so only need to look at the
         * current configuration.
         */
-       drm_for_each_connector(connector, state->dev) {
+       drm_connector_list_iter_get(state->dev, &conn_iter);
+       drm_for_each_connector_iter(connector, &conn_iter) {
                if (connector->state->crtc != crtc)
                        continue;
 
                conn_state = drm_atomic_get_connector_state(state, connector);
-               if (IS_ERR(conn_state))
+               if (IS_ERR(conn_state)) {
+                       drm_connector_list_iter_put(&conn_iter);
                        return PTR_ERR(conn_state);
+               }
        }
+       drm_connector_list_iter_put(&conn_iter);
 
        return 0;
 }
@@ -1692,6 +1697,7 @@ void drm_state_dump(struct drm_device *dev, struct drm_printer *p)
        struct drm_plane *plane;
        struct drm_crtc *crtc;
        struct drm_connector *connector;
+       struct drm_connector_list_iter conn_iter;
 
        if (!drm_core_check_feature(dev, DRIVER_ATOMIC))
                return;
@@ -1702,8 +1708,10 @@ void drm_state_dump(struct drm_device *dev, struct drm_printer *p)
        list_for_each_entry(crtc, &config->crtc_list, head)
                drm_atomic_crtc_print_state(p, crtc->state);
 
-       list_for_each_entry(connector, &config->connector_list, head)
+       drm_connector_list_iter_get(dev, &conn_iter);
+       drm_for_each_connector_iter(connector, &conn_iter)
                drm_atomic_connector_print_state(p, connector->state);
+       drm_connector_list_iter_put(&conn_iter);
 }
 EXPORT_SYMBOL(drm_state_dump);