[alsa-devel] [PATCH] ASoC: samsung: get access to DMA engine early to defer probe properly

Sylwester Nawrocki s.nawrocki at samsung.com
Thu Oct 27 18:45:31 CEST 2016


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 at samsung.com>

Reviewed-by: Sylwester Nawrocki <s.nawrocki at samsung.com>

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"






More information about the Alsa-devel mailing list