[PATCH] drm/exynos: fix infinite loop issue incurred by no pair

Sjoerd Simons sjoerd.simons at collabora.co.uk
Mon Nov 17 23:58:09 PST 2014


On Tue, 2014-11-18 at 12:20 +0900, Inki Dae wrote:
> 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.

At first sight this seems to make little to no sense. Unless i'm
mistaken this would cause the exynos drm probe return -ENODEV to the dd
core, causing it to stop trying to probe. Which obviously breaks your
infinite loop, it also breaks situations where the probe needs to be
retried more then 3 times. 

I suspect with this patch once exynos DRM is loaded and actually validly
needs to defer (iotw when the required modules do exist but simply
aren't loaded just yet), it still jumps into an infinite loop which you
break after 3 tries after which the display will simply never come up
even if everything is in place because the core doesn't know it should
re-probe....



> 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);
>  }
>  


-------------- next part --------------
A non-text attachment was scrubbed...
Name: smime.p7s
Type: application/x-pkcs7-signature
Size: 6170 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/dri-devel/attachments/20141118/098dcf0a/attachment-0001.bin>


More information about the dri-devel mailing list