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

Andrzej Hajda a.hajda at samsung.com
Tue Nov 18 02:48:12 PST 2014


On 11/18/2014 11:23 AM, Javier Martinez Canillas wrote:
> Hello Inki,
> 
>> Right, but at least, we could avoid kernel booting failure which is very
>> critical. Please know that this patch is temporary to avoid the kernel
>> booting failure although deferred probe request of Exynos drm could be
>> broken. For this, I will look into dd core to find out more generic way:
>> I suspect that this might be incurred in case that a driver is probed in
>> probe context of other driver or it might be really dd core bug.
>>
> 
> I gave a try to your patch on top of today's linux-next and I still
> see the same boot failure reported by Kevin on a Exynos5420 Peach Pit
> so $subject does not fix the issue. The boot message is [0] fyi.
> 
> By digging a bit I noticed that this happens when the
> exynos_drm_platform_probe() calls platform_driver_register() to
> register the Exynos fimd platform driver. The problem is that in
> __driver_attach() the call to device_lock(dev->parent) never returns
> and the thread sleeps forever waiting for the device parent mutex to
> be released.
> 
> Do you have any ideas why this could happen?
> 
> If I modify __driver_attach() to only grab the device lock and not its
> parent lock, then the thread is able to hold its own mutex and the
> platform driver registration succeeds but then I see the infinite loop
> that was reported before and the workaround in $subject indeed avoids
> to happen.
> 
> So we have two issues here and your patch is only a workaround for the later.

This is the same issue Krzysztof reported two weeks ago and I answered
him with my diagnosis[1].

[1]: http://permalink.gmane.org/gmane.linux.kernel.samsung-soc/39804

Regards
Andrzej

> 
> Best regards,
> Javier
> 
> [0]:
> [    1.324091] [drm] Initialized drm 1.1.0 20060810
> [  240.158665] random: nonblocking pool is initialized
> [  240.162202] INFO: task swapper/0:1 blocked for more than 120 seconds.
> [  240.168493]       Not tainted 3.18.0-rc4-next-20141117-00001-g85466f9 #22
> [  240.175256] "echo 0 > /proc/sys/kernel/hung_task_timeout_secs"
> disables this message.
> [  240.183064] swapper/0       D c045bb00     0     1      0 0x00000000
> [  240.189410] [<c045bb00>] (__schedule) from [<c045c230>]
> (schedule_preempt_disabled+0x14/0x20)
> [  240.197904] [<c045c230>] (schedule_preempt_disabled) from
> [<c045e998>] (__mutex_lock_slowpath+0x19c/0x3f4)
> [  240.207531] [<c045e998>] (__mutex_lock_slowpath) from [<c045ebfc>]
> (mutex_lock+0xc/0x24)
> [  240.215599] [<c045ebfc>] (mutex_lock) from [<c0281718>]
> (__driver_attach+0x44/0x90)
> [  240.223239] [<c0281718>] (__driver_attach) from [<c027ff30>]
> (bus_for_each_dev+0x54/0x88)
> [  240.231387] [<c027ff30>] (bus_for_each_dev) from [<c0280da0>]
> (bus_add_driver+0xd8/0x1cc)
> [  240.239541] [<c0280da0>] (bus_add_driver) from [<c0281d80>]
> (driver_register+0x78/0xf4)
> [  240.247523] [<c0281d80>] (driver_register) from [<c0274324>]
> (exynos_drm_platform_probe+0x34/0x188)
> [  240.256546] [<c0274324>] (exynos_drm_platform_probe) from
> [<c02829d8>] (platform_drv_probe+0x48/0x98)
> [  240.265739] [<c02829d8>] (platform_drv_probe) from [<c02815b4>]
> (driver_probe_device+0x114/0x234)
> [  240.274588] [<c02815b4>] (driver_probe_device) from [<c0281760>]
> (__driver_attach+0x8c/0x90)
> [  240.283003] [<c0281760>] (__driver_attach) from [<c027ff30>]
> (bus_for_each_dev+0x54/0x88)
> [  240.291158] [<c027ff30>] (bus_for_each_dev) from [<c0280da0>]
> (bus_add_driver+0xd8/0x1cc)
> [  240.299311] [<c0280da0>] (bus_add_driver) from [<c0281d80>]
> (driver_register+0x78/0xf4)
> [  240.307293] [<c0281d80>] (driver_register) from [<c02742a4>]
> (exynos_drm_init+0x84/0xd0)
> [  240.315362] [<c02742a4>] (exynos_drm_init) from [<c0008944>]
> (do_one_initcall+0x80/0x1d0)
> [  240.323521] [<c0008944>] (do_one_initcall) from [<c0624d3c>]
> (kernel_init_freeable+0x108/0x1d4)
> [  240.332191] [<c0624d3c>] (kernel_init_freeable) from [<c0457224>]
> (kernel_init+0x8/0xe4)
> [  240.340261] [<c0457224>] (kernel_init) from [<c000e638>]
> (ret_from_fork+0x14/0x3c)
> 



More information about the dri-devel mailing list