dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: Inki Dae <inki.dae@samsung.com>
To: dri-devel@lists.freedesktop.org
Cc: khilman@deeprootsystems.com, linux-samsung-soc@vger.kernel.org
Subject: [PATCH] drm/exynos: fix infinite loop issue incurred by no pair
Date: Tue, 18 Nov 2014 12:20:32 +0900	[thread overview]
Message-ID: <1416280832-24609-1-git-send-email-inki.dae@samsung.com> (raw)

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 <inki.dae@samsung.com>
---
 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);
 }
 
-- 
1.7.9.5

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

             reply	other threads:[~2014-11-18  3:20 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-18  3:20 Inki Dae [this message]
2014-11-18  7:58 ` [PATCH] drm/exynos: fix infinite loop issue incurred by no pair Sjoerd Simons
2014-11-18  8:20   ` Inki Dae
2014-11-18 10:23     ` Javier Martinez Canillas
2014-11-18 10:45       ` Inki Dae
2014-11-18 10:48       ` Andrzej Hajda
2014-11-18 10:53         ` Javier Martinez Canillas
2014-11-18 13:31 ` Inki Dae

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1416280832-24609-1-git-send-email-inki.dae@samsung.com \
    --to=inki.dae@samsung.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=khilman@deeprootsystems.com \
    --cc=linux-samsung-soc@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox