[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