• Joao Paulo Goncalves's avatar
    ASoC: ti: davinci-mcasp: Fix race condition during probe · d18ca863
    Joao Paulo Goncalves authored
    When using davinci-mcasp as CPU DAI with simple-card, there are some
    conditions that cause simple-card to finish registering a sound card before
    davinci-mcasp finishes registering all sound components. This creates a
    non-working sound card from userspace with no problem indication apart
    from not being able to play/record audio on a PCM stream. The issue
    arises during simultaneous probe execution of both drivers. Specifically,
    the simple-card driver, awaiting a CPU DAI, proceeds as soon as
    davinci-mcasp registers its DAI. However, this process can lead to the
    client mutex lock (client_mutex in soc-core.c) being held or davinci-mcasp
    being preempted before PCM DMA registration on davinci-mcasp finishes.
    This situation occurs when the probes of both drivers run concurrently.
    Below is the code path for this condition. To solve the issue, defer
    davinci-mcasp CPU DAI registration to the last step in the audio part of
    it. This way, simple-card CPU DAI parsing will be deferred until all
    audio components are registered.
    
    Fail Code Path:
    
    simple-card.c: probe starts
    simple-card.c: simple_dai_link_of: simple_parse_node(..,cpu,..) returns EPROBE_DEFER, no CPU DAI yet
    davinci-mcasp.c: probe starts
    davinci-mcasp.c: devm_snd_soc_register_component() register CPU DAI
    simple-card.c: probes again, finish CPU DAI parsing and call devm_snd_soc_register_card()
    simple-card.c: finish probe
    davinci-mcasp.c: *dma_pcm_platform_register() register PCM  DMA
    davinci-mcasp.c: probe finish
    
    Cc: stable@vger.kernel.org
    Fixes: 9fbd58cf ("ASoC: davinci-mcasp: Choose PCM driver based on configured DMA controller")
    Signed-off-by: default avatarJoao Paulo Goncalves <joao.goncalves@toradex.com>
    Acked-by: default avatarPeter Ujfalusi <peter.ujfalusi@gmail.com>
    Reviewed-by: default avatarJai Luthra <j-luthra@ti.com>
    Link: https://lore.kernel.org/r/20240417184138.1104774-1-jpaulo.silvagoncalves@gmail.comSigned-off-by: default avatarMark Brown <broonie@kernel.org>
    d18ca863
davinci-mcasp.c 66.3 KB