[RESEND PATCH] ASoC: core: Exit all links before removing their components
Cezary Rojewski
cezary.rojewski at intel.com
Fri Nov 18 11:56:40 CET 2022
On 2022-10-27 10:58 AM, Cezary Rojewski wrote:
> Flows leading to link->init() and link->exit() are not symmetric.
> Currently the relevant part of card probe sequence goes as:
>
> for_each_card_rtds(card, rtd)
> for_each_rtd_components(rtd, i, component)
> component->probe()
> for_each_card_rtds(card, rtd)
> for_each_rtd_dais(rtd, i, dai)
> dai->probe()
> for_each_card_rtds(card, rtd)
> rtd->init()
>
> On the other side, equivalent remove sequence goes as:
>
> for_each_card_rtds(card, rtd)
> for_each_rtd_dais(rtd, i, dai)
> dai->remove()
> for_each_card_rtds(card, rtd)
> for_each_rtd_components(rtd, i, component)
> component->remove()
> for_each_card_rtds(card, rtd)
> rtd->exit()
>
> what can lead to errors as link->exit() may still operate on resources
> owned by its components despite the probability of them being freed
> during the component->remove().
>
> This change modifies the remove sequence to:
>
> for_each_card_rtds(card, rtd)
> rtd->exit()
> for_each_card_rtds(card, rtd)
> for_each_rtd_dais(rtd, i, dai)
> dai->remove()
> for_each_card_rtds(card, rtd)
> for_each_rtd_components(rtd, i, component)
> component->remove()
>
> so code found in link->exit() is safe to touch any component stuff as
> component->remove() has not been called yet.
As this is connected (and is a dependency) for some jack-handler
refactoring in Intel boards, perhaps it will be better if I send this
patch as part of a series? Lacks some context.
Regards,
Czarek
More information about the Alsa-devel
mailing list