[PATCH] drm/exynos: fix infinite loop issue incurred by no pair
Inki Dae
inki.dae at samsung.com
Tue Nov 18 05:31:28 PST 2014
On 2014년 11월 18일 12:20, Inki Dae wrote:
> 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.
Ignore this patch. I will post other patch set soon, which supports full
separated sub driver modules.
Thanks,
Inki Dae
>
> Signed-off-by: Inki Dae <inki.dae at 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);
> }
>
>
More information about the dri-devel
mailing list