From patchwork Tue Dec 13 23:08:08 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 9473355 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 1D51860476 for ; Tue, 13 Dec 2016 23:10:13 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 109DE28403 for ; Tue, 13 Dec 2016 23:10:13 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 05D1928600; Tue, 13 Dec 2016 23:10:13 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.1 required=2.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED, T_DKIM_INVALID autolearn=unavailable version=3.3.1 Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher DHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 5636628403 for ; Tue, 13 Dec 2016 23:10:09 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4ED636E6EE; Tue, 13 Dec 2016 23:09:20 +0000 (UTC) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wj0-x243.google.com (mail-wj0-x243.google.com [IPv6:2a00:1450:400c:c01::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 3A5486E6BA for ; Tue, 13 Dec 2016 23:08:31 +0000 (UTC) Received: by mail-wj0-x243.google.com with SMTP id j10so488879wjb.3 for ; Tue, 13 Dec 2016 15:08:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ffwll.ch; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=1MYZpXGIT2WWv1xfoTT56oVJUi8Av8Ehs6EafmHCn+0=; b=A/Gk4Cj/1FJcD73rGKT9d2EvhKaeaeIpH0Ti1Sgg+yus2jVfjVcj4Vj/cisRjL9Hmr oIzfwlXVnqc/5m7nWHGobn0keJtaQXDEJKtIMSDFQPPX+6Wmwy26Y6cLDjMGMBxJkrpO qb7dZqPysUKAOsRqz4zZR1xzyYEYyKE/gvsnY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=1MYZpXGIT2WWv1xfoTT56oVJUi8Av8Ehs6EafmHCn+0=; b=C4DkLcWj1b5dmq6RV+5f9GFVhWJJqbeWI+G8nMnqgD/AmpS+kOmcT5ZeVR8Sr6dk1S q8zE/so0vHnvUg74RwwTYObblW5Af/Ax/qF9hVZbIeh8RfaOuvAGFsVMbyI3vz78y3Kg bWDWVfgqaLbhyoKD2d/gA3ohvf+NAv8oqzwH0fiQywBYAWSSqv5ovZkqHNACsNjKrFw1 UGPW5ZBVlTL2fK4yiip9FnENs562HlcuL06vNIIREMTTsSnl8wtB5fL4YJY5R5XhFIfZ vf06BdF7HiajliIAKgmc5jWmXs+rL+0w9tuf1vx2o8//KpDsCNO+1NRCFZJCorUa3rN9 YdGw== X-Gm-Message-State: AKaTC01ilUOX8tOA8g4VBbugl4sGCvVWf3D/ARobjaW7TIfoLbAm7d2onG9K1OrBNeUfyw== X-Received: by 10.28.126.146 with SMTP id z140mr4775822wmc.84.1481670509292; Tue, 13 Dec 2016 15:08:29 -0800 (PST) Received: from phenom.ffwll.local ([2a02:168:56b5:0:ac27:b86c:7764:9429]) by smtp.gmail.com with ESMTPSA id ke6sm64350375wjb.21.2016.12.13.15.08.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Dec 2016 15:08:28 -0800 (PST) From: Daniel Vetter To: DRI Development Date: Wed, 14 Dec 2016 00:08:08 +0100 Message-Id: <20161213230814.19598-8-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.11.0 In-Reply-To: <20161213230814.19598-1-daniel.vetter@ffwll.ch> References: <20161213230814.19598-1-daniel.vetter@ffwll.ch> Cc: Daniel Vetter , Intel Graphics Development , Daniel Vetter Subject: [Intel-gfx] [PATCH 07/13] drm: Clean up connectors by unreferencing them X-BeenThere: intel-gfx@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Intel graphics driver community testing & development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" X-Virus-Scanned: ClamAV using ClamSMTP 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 Reviewed-by: Harry Wentland Reviewed-by: Sean Paul --- 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) {