On 10/27/2016 12:34 PM, Marek Szyprowski wrote: > ASoC Samsung sub-drivers tried to get access to their DMA engine > controllers as a last step in driver probe. If a DMA engine was not > available yet, samsung_asoc_dma_platform_register() function ended in > -EPROBE_DEFER, but the driver already registered its component to ASoC > core. This patch moves samsung_asoc_dma_platform_register() call before > registering any components, to the common place, where driver was gathering > all needed resources. > > In case of Samsung Exynos i2s driver the issue was even worse. The driver > managed already to register its secondary DAI platform device before > even getting the DMA engine access. That together with -EPROBE_DEFER error > code from samsung_i2s_probe() immediately triggered another round of > deferred probe retry and in turn endless loop of driver probing. > > This patch fixes broken boot on Odroid XU3 and other Exynos5422-based > boards. > > Signed-off-by: Marek Szyprowski <m.szyprowski@xxxxxxxxxxx> Reviewed-by: Sylwester Nawrocki <s.nawrocki@xxxxxxxxxxx> It's worth to note that the endless re-probing loop happens randomly, not on every boot. And the issue got uncovered by a commit which seems to be slightly changing scheduling of work on the main probe deferral workqueue and deferral of the amba devices [1], i.e. after this commit all probe deferral jobs are scheduled to a single system_wq workqueue. It seems concurrency change after the patch was significant enough to make deferred probing of one device to starve deferred probing of other device in that case. [1] commit 2c507e464f791327c94d17a0137f00b4717744fc "device core: Remove deprecated create_singlethread_workqueue" _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel