[PATCH][RFC] ASoC: soc-component: count snd_soc_component_open/close()
Kuninori Morimoto
kuninori.morimoto.gx at renesas.com
Thu Feb 20 02:41:48 CET 2020
Hi Sridharan
> ASoC component open/close and snd_soc_component_module_get/put are
> called once for each component, but we need it for each substream.
> To solve this issue, this patch counts open / get,
> and call close / put accordingly.
>
> Fixes: dd03907bf129 ("ASoC: soc-pcm: call snd_soc_component_open/close() once")
> Reported-by: Kai Vehmanen <kai.vehmanen at linux.intel.com>
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx at renesas.com>
> ---
(snip)
> @@ -297,14 +297,16 @@ EXPORT_SYMBOL_GPL(snd_soc_component_set_jack);
> int snd_soc_component_module_get(struct snd_soc_component *component,
> int upon_open)
> {
> - if (component->module)
> - return 0;
> + if (unlikely(component->module == 0xff)) {
> + dev_warn(component->dev, "too many module get (%s)\n", component->name);
> + return -EBUSY;
> + }
>
> if (component->driver->module_get_upon_open == !!upon_open &&
> !try_module_get(component->dev->driver->owner))
> return -ENODEV;
>
> - component->module = 1;
> + component->module++;
>
> Thanks, Morimoto-san for the alternate fix. I understand the rationale for having a count for component->opened, but what is the rationale for the module count? What it is
> intended to protect?
I think same as open ?
It protects calling put() from not-get-component.
Because module_put() has WARN_ON(ret < 0).
Thank you for your help !!
Best regards
---
Kuninori Morimoto
More information about the Alsa-devel
mailing list