[PATCH 07/13] drm: Clean up connectors by unreferencing them
Harry Wentland
harry.wentland at amd.com
Thu Dec 15 15:45:19 UTC 2016
On 2016-12-13 06:08 PM, Daniel Vetter wrote:
> Only static connectors should be left at this point, and we should be
> able to clean them out by simply dropping that last reference still
> around from drm_connector_init.
>
> If that leaves anything behind then we have a driver bug.
>
> Doing the final cleanup this way also allows us to use
> drm_connector_iter, removing the very last place where we walk
> connector_list explicitly in drm core&helpers.
>
> Signed-off-by: Daniel Vetter <daniel.vetter at intel.com>
> ---
> drivers/gpu/drm/drm_mode_config.c | 15 +++++++++++----
> 1 file changed, 11 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_mode_config.c b/drivers/gpu/drm/drm_mode_config.c
> index 747a26df0e90..a942536abd60 100644
> --- a/drivers/gpu/drm/drm_mode_config.c
> +++ b/drivers/gpu/drm/drm_mode_config.c
> @@ -397,7 +397,8 @@ EXPORT_SYMBOL(drm_mode_config_init);
> */
> void drm_mode_config_cleanup(struct drm_device *dev)
> {
> - struct drm_connector *connector, *ot;
> + struct drm_connector *connector;
> + struct drm_connector_list_iter conn_iter;
> struct drm_crtc *crtc, *ct;
> struct drm_encoder *encoder, *enct;
> struct drm_framebuffer *fb, *fbt;
> @@ -410,10 +411,16 @@ void drm_mode_config_cleanup(struct drm_device *dev)
> encoder->funcs->destroy(encoder);
> }
>
> - list_for_each_entry_safe(connector, ot,
> - &dev->mode_config.connector_list, head) {
> - connector->funcs->destroy(connector);
> + drm_connector_list_iter_get(dev, &conn_iter);
> + drm_for_each_connector_iter(connector, &conn_iter) {
> + /* drm_connector_list_iter holds an full reference to the
> + * current connector itself, which means it is inherently safe
> + * against unreferencing the current connector - but not against
> + * deleting it right away. */
> + drm_connector_unreference(connector);
> }
> + drm_connector_list_iter_put(&conn_iter);
> + WARN_ON(!list_empty(&dev->mode_config.connector_list));
>
> list_for_each_entry_safe(property, pt, &dev->mode_config.property_list,
> head) {
>
Reviewed-by: Harry Wentland <harry.wentland at amd.com>
Harry
More information about the dri-devel
mailing list