From patchwork Tue Nov 18 03:20:32 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Inki Dae X-Patchwork-Id: 5325391 Return-Path: X-Original-To: patchwork-dri-devel@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.19.201]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 11D6A9F2ED for ; Tue, 18 Nov 2014 03:20:42 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 36B0A20179 for ; Tue, 18 Nov 2014 03:20:41 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) by mail.kernel.org (Postfix) with ESMTP id 81F8F2017A for ; Tue, 18 Nov 2014 03:20:39 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 161026E2AA; Mon, 17 Nov 2014 19:20:37 -0800 (PST) X-Original-To: dri-devel@lists.freedesktop.org Delivered-To: dri-devel@lists.freedesktop.org Received: from mailout4.samsung.com (mailout4.samsung.com [203.254.224.34]) by gabe.freedesktop.org (Postfix) with ESMTP id 3D0936E2AA for ; Mon, 17 Nov 2014 19:20:35 -0800 (PST) Received: from epcpsbgr5.samsung.com (u145.gpu120.samsung.co.kr [203.254.230.145]) by mailout4.samsung.com (Oracle Communications Messaging Server 7u4-24.01 (7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTP id <0NF700MNPTA9FJ70@mailout4.samsung.com> for dri-devel@lists.freedesktop.org; Tue, 18 Nov 2014 12:20:33 +0900 (KST) Received: from epcpsbgm1.samsung.com ( [172.20.52.116]) by epcpsbgr5.samsung.com (EPCPMTA) with SMTP id AB.8D.19034.10BBA645; Tue, 18 Nov 2014 12:20:33 +0900 (KST) X-AuditID: cbfee691-f79b86d000004a5a-0c-546abb01f051 Received: from epmmp1.local.host ( [203.254.227.16]) by epcpsbgm1.samsung.com (EPCPMTA) with SMTP id 7F.72.20081.10BBA645; Tue, 18 Nov 2014 12:20:33 +0900 (KST) Received: from daeinki-desktop.10.32.193.11 ([10.252.83.67]) by mmp1.samsung.com (Oracle Communications Messaging Server 7u4-24.01(7.0.4.24.0) 64bit (built Nov 17 2011)) with ESMTPA id <0NF700IQHTA8KR11@mmp1.samsung.com>; Tue, 18 Nov 2014 12:20:33 +0900 (KST) From: Inki Dae To: dri-devel@lists.freedesktop.org Subject: [PATCH] drm/exynos: fix infinite loop issue incurred by no pair Date: Tue, 18 Nov 2014 12:20:32 +0900 Message-id: <1416280832-24609-1-git-send-email-inki.dae@samsung.com> X-Mailer: git-send-email 1.7.9.5 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFtrOLMWRmVeSWpSXmKPExsWyRsSkRJdxd1aIwdTtQha9504yWVz5+p7N YtL9CSwWd1YwW8w4v4/JgdXj+qv/TB7bvz1g9bjffZzJo2/LKkaPz5vkAlijuGxSUnMyy1KL 9O0SuDK2/VnIUnCDv2JT9zvWBsb/PF2MnBwSAiYSq76eYYOwxSQu3FsPZHNxCAksZZT40r2I Gabo+tqnjCC2kMAiRok9G2ohirqZJK5vv8kEkmATUJWYuOI+2CQRAWWJvxNXgTUwC5RLvOtp YwGxhQU8JHasv80OYrMA1fdcfQ8W5xVwkWg42wcU5wBapiAxZ5INyHwJgfdsEnNnrWGFqBeQ +Db5EAtEjazEpgNQt0lKHFxxg2UCo+ACRoZVjKKpBckFxUnpRaZ6xYm5xaV56XrJ+bmbGIHh efrfs4k7GO8fsD7EKMDBqMTDmzA1K0SINbGsuDL3EKMp0IaJzFKiyfnAKMgriTc0NjOyMDUx NTYytzRTEufVkf4ZLCSQnliSmp2aWpBaFF9UmpNafIiRiYNTqoExs+78qld5+qtCvFMe+LFv mnMrf+HtdxN3fImTn1WjcLikP9N9zfrvb+5E6pw/u1OWc9uvVW5yX6wmnZgf4H3kb/R2y+c1 m5hmJ/RsPyWw7kRfi7o1A5/hjbMG0QFfbO/VvTqomlmSnSN+44h1kdERl2Bnxn1s8Yvsj/Ut zjhY80c/5Ovh+CO/lViKMxINtZiLihMBOfFU20oCAAA= X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkkeLIzCtJLcpLzFFi42I5/e+xgC7j7qwQg0MzuC16z51ksrjy9T2b xaT7E1gs7qxgtphxfh+TA6vH9Vf/mTy2f3vA6nG/+ziTR9+WVYwenzfJBbBGNTDaZKQmpqQW KaTmJeenZOal2yp5B8c7x5uaGRjqGlpamCsp5CXmptoqufgE6Lpl5gAtV1IoS8wpBQoFJBYX K+nbYZoQGuKmawHTGKHrGxIE12NkgAYS1jBmbPuzkKXgBn/Fpu53rA2M/3m6GDk5JARMJK6v fcoIYYtJXLi3ng3EFhJYxCixZ0NtFyMXkN3NJHF9+00mkASbgKrExBX3wYpEBJQl/k5cBdbM LFAu8a6njQXEFhbwkNix/jY7iM0CVN9z9T1YnFfARaLhbB9QnANomYLEnEk2Exi5FzAyrGIU TS1ILihOSs811CtOzC0uzUvXS87P3cQIDv5nUjsYVzZYHGIU4GBU4uFNmJoVIsSaWFZcmXuI UYKDWUmE91w3UIg3JbGyKrUoP76oNCe1+BCjKdDyicxSosn5wMjMK4k3NDYxM7I0Mje0MDI2 VxLnPdBqHSgkkJ5YkpqdmlqQWgTTx8TBKdXAON1hFnfmhLWftTRqZGWsdA+cv5i5elJp16Le TfsXT30c4/8+n2X+1u0MQYf1ildvvWlcvCHhliNHTizr9M+v3pWcOzZj6V6HSQ4mOpqf6/Y+ 41xh+PjmBOGr4qw7QufWbUtZ83ndE9fXzgkzEu9NqPh6dOqXP4Jb26ekONVkmAcs+NH5NO7S hwtKLMUZiYZazEXFiQAmN5AblAIAAA== DLP-Filter: Pass X-MTR: 20000000000000000@CPGS X-CFilter-Loop: Reflected Cc: khilman@deeprootsystems.com, linux-samsung-soc@vger.kernel.org X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_MED, T_RP_MATCHES_RCVD, 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 This patch fixes a infinite loop issue incurred when it doesn't have a pair of crtc and connector drivers, which was reported by Kevin Hilman like below, http://www.spinics.net/lists/linux-samsung-soc/msg39050.html cdev->conn_dev could be NULL by exynos_drm_component_del call in case that connector driver is failed while probing after compoments to crtc and connector drivers are added to specific drm_compoment_list. In this case, exynos_drm_match_add returns -EPROBE_DEFER error and Exynos drm driver will try the defered probe over and over again. This patch makes the deferred probe is tried up to 3 times in maximum. However, this is considered only for Exynos drm so I think other SoC drivers could also produce same issue. Therefore, the best way to resolve this issue, infinite loop incurred by defered probe, would be that dd core is fixed up corrrectly. Signed-off-by: Inki Dae --- drivers/gpu/drm/exynos/exynos_drm_drv.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index eab12f0..4d84f3a 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c @@ -38,6 +38,8 @@ #define DRIVER_MAJOR 1 #define DRIVER_MINOR 0 +#define MAX_TRY_PROBE_DEFER 3 + static struct platform_device *exynos_drm_pdev; static DEFINE_MUTEX(drm_component_lock); @@ -481,6 +483,7 @@ static struct component_match *exynos_drm_match_add(struct device *dev) struct component_match *match = NULL; struct component_dev *cdev; unsigned int attach_cnt = 0; + static unsigned int try_probe_defer; mutex_lock(&drm_component_lock); @@ -527,6 +530,11 @@ out_lock: mutex_unlock(&drm_component_lock); + if (++try_probe_defer > MAX_TRY_PROBE_DEFER) { + try_probe_defer = 0; + return ERR_PTR(-ENODEV); + } + return attach_cnt ? match : ERR_PTR(-EPROBE_DEFER); }