From patchwork Tue Jun 23 20:45:56 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Daniel Vetter X-Patchwork-Id: 6663111 Return-Path: X-Original-To: patchwork-intel-gfx@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 1B0B09F1C1 for ; Tue, 23 Jun 2015 20:43:32 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 3A3E120582 for ; Tue, 23 Jun 2015 20:43:31 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 5F26820555 for ; Tue, 23 Jun 2015 20:43:30 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id C75F76EA6E; Tue, 23 Jun 2015 13:43:27 -0700 (PDT) X-Original-To: intel-gfx@lists.freedesktop.org Delivered-To: intel-gfx@lists.freedesktop.org Received: from mail-wg0-f51.google.com (mail-wg0-f51.google.com [74.125.82.51]) by gabe.freedesktop.org (Postfix) with ESMTP id 956C56EA67 for ; Tue, 23 Jun 2015 13:43:26 -0700 (PDT) Received: by wgqq4 with SMTP id q4so19683839wgq.1 for ; Tue, 23 Jun 2015 13:43:26 -0700 (PDT) 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=xuN6eXiozNGlm3xrN3cG3Ba5mIToYe3GRfaQymPlRcQ=; b=bBuiGfslHTYhylCgZWhr/vRlAncDNmXOsXktGC7FgJRkpnSQe6cPBjPteZ5z5KU9qt bhs3jHvGoZfWzy05bPMWxIvs2hjf4Ony9wA437FjQQMybOxMjN20qNPWpjqsQHPMtwd0 XxK6sCnXdYcXKHV18MuRO+TPmD65lwt3Leum0= 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=xuN6eXiozNGlm3xrN3cG3Ba5mIToYe3GRfaQymPlRcQ=; b=DFsdpINOzN44A4eYiwCAwZEp6lmRokddhwWb6g2eeCSIRGVBvFcCZTgj1F2EKfv9Qb YViT8Snpf/ISP07T63CfdmmfExEwePeDMxiYV1xhoWzV3cUixY1SQ9l/WQYoPwEKjOoX 44VZoIGlnXiTGMmqVjyWTNETQhF/HO3yLIK2RIx6mXwQx5ZqHimA6wVXvxtRQ3AF4fjO Fjpb6u5D0xU+NFgiYwzuHrSVf47Nx0Zv6c/QglyBJ75FhO2FB095UGa/3hH4/I6sOkGI zQOTkV2zR+3ketGkB/ccqFBR5teZDgQ2ozSU/HsRQpfsBitsgy2JaFpmy3xBtiTF50ee yV8w== X-Gm-Message-State: ALoCoQlZ314y5s5MdF7aKPzQDIKbH6qBfPEpFIZ6IqeKagqODHuYGPrVvH1lG04tCN7dSH54TTIc X-Received: by 10.180.87.105 with SMTP id w9mr6767621wiz.32.1435092206017; Tue, 23 Jun 2015 13:43:26 -0700 (PDT) Received: from phenom.ffwll.local (212-51-149-109.fiber7.init7.net. [212.51.149.109]) by mx.google.com with ESMTPSA id c2sm34354177wjf.18.2015.06.23.13.43.24 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 23 Jun 2015 13:43:25 -0700 (PDT) From: Daniel Vetter To: DRI Development Date: Tue, 23 Jun 2015 22:45:56 +0200 Message-Id: <1435092362-31062-6-git-send-email-daniel.vetter@ffwll.ch> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1435092362-31062-1-git-send-email-daniel.vetter@ffwll.ch> References: <1435092362-31062-1-git-send-email-daniel.vetter@ffwll.ch> Cc: Daniel Vetter , Intel Graphics Development , Daniel Vetter Subject: [Intel-gfx] [PATCH 05/11] drm: Check locking in drm_for_each_encoder/connector 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-Spam-Status: No, score=-5.5 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_MED,RP_MATCHES_RCVD,T_DKIM_INVALID,UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Because of DP MST encoders/connectors can now be hotplugged and we must hold the right lock when walking the encoder/connector lists. Enforce this by checking the locking in our shiny new list walking macros. Signed-off-by: Daniel Vetter --- include/drm/drm_crtc.h | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h index 5994750f523a..a912ba06cf45 100644 --- a/include/drm/drm_crtc.h +++ b/include/drm/drm_crtc.h @@ -1588,10 +1588,18 @@ static inline struct drm_property *drm_property_find(struct drm_device *dev, list_for_each_entry(crtc, &(dev)->mode_config.crtc_list, head) #define drm_for_each_connector(connector, dev) \ - list_for_each_entry(connector, &(dev)->mode_config.connector_list, head) + for (WARN_ON(!mutex_is_locked(&(dev)->mode_config.mutex)), \ + connector = list_first_entry(&(dev)->mode_config.connector_list, \ + struct drm_connector, head); \ + &connector->head != (&(dev)->mode_config.connector_list); \ + connector = list_next_entry(connector, head)) #define drm_for_each_encoder(encoder, dev) \ - list_for_each_entry(encoder, &(dev)->mode_config.encoder_list, head) + for (WARN_ON(!mutex_is_locked(&(dev)->mode_config.mutex)), \ + encoder = list_first_entry(&(dev)->mode_config.encoder_list, \ + struct drm_encoder, head); \ + &encoder->head != (&(dev)->mode_config.encoder_list); \ + encoder = list_next_entry(encoder, head)) #define drm_for_each_fb(fb, dev) \ list_for_each_entry(fb, &(dev)->mode_config.fb_list, head)