From: Kai Vehmanen <kai.vehmanen@linux.intel.com>
To: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Cc: alsa-devel@alsa-project.org,
Kai Vehmanen <kai.vehmanen@linux.intel.com>,
ranjani.sridharan@linux.intel.com,
pierre-louis.bossart@linux.intel.com, broonie@kernel.org,
digetx@gmail.com
Subject: Re: [PATCH] ASoC: soc-pcm: Revert "call snd_soc_component_open/close() once"
Date: Thu, 27 Feb 2020 11:41:16 +0200 (EET) [thread overview]
Message-ID: <alpine.DEB.2.21.2002271110010.2957@eliteleevi.tm.intel.com> (raw)
In-Reply-To: <87ftey88wk.wl-kuninori.morimoto.gx@renesas.com>
Hello Morimoto-san,
On Wed, 26 Feb 2020, Kuninori Morimoto wrote:
> Maybe this is too late, but I want to tell
> the reason why I wanted to add flag on each component.
[...]
> If each component / rtd / dai have "done" flag or count,
> soc_pcm_open() can call soc_pcm_close() directly
> without thinking about "until", because each flag can handle/indicate it.
thanks for the longer explanation. It's true we have a lot of code with
for_each_xxx() loops, and loop logic where errors can occur. It seems the
most common approach is to store the index and use for_each_xxx_rollback()
macros to clean up in case error happens. This does lead to the problem of
essentially duplicated logic e.g. for soc_pcm_close() and error handling
of snd_pcm_open(). And yeah, it's also a bit error prone as the logic is
not exactly the same. E.g. I'm not convinced this is quite right in
soc_pcm_open():
» for_each_rtd_codec_dai(rtd, i, codec_dai) {
» » ret = snd_soc_dai_startup(codec_dai, substream);
» » if (ret < 0) {
» » » dev_err(codec_dai->dev,
» » » » "ASoC: can't open codec %s: %d\n",
» » » » codec_dai->name, ret);
» » » goto config_err;
» » }
...
config_err:
» for_each_rtd_codec_dai(rtd, i, codec_dai)
» » snd_soc_dai_shutdown(codec_dai, substream);
» i = rtd->num_cpus;
... i.e. we should use _rollback() macro here, but we don't so shutdown
is called on all codec dais if I read this right.
Having a single cleanup path would be easier, but I think in the end it
comes down to how cleanly you can track the opened state. It seems biggest
issue is how to cleanly track the component-substream pairs. Ideally we'd
have a dedicated state object to represent an opened component-substream
pair, but that's not how the APIs are defined now. But something to that
effect is needed.
Br, Kai
next prev parent reply other threads:[~2020-02-27 9:42 UTC|newest]
Thread overview: 27+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-02-19 18:26 [PATCH] ASoC: soc-pcm: Revert "call snd_soc_component_open/close() once" Kai Vehmanen
2020-02-19 18:53 ` Kai Vehmanen
2020-02-19 19:27 ` Pierre-Louis Bossart
2020-02-19 19:37 ` Dmitry Osipenko
2020-02-20 0:42 ` Kuninori Morimoto
2020-02-20 0:59 ` [PATCH][RFC] ASoC: soc-component: count snd_soc_component_open/close() Kuninori Morimoto
2020-02-20 1:25 ` Sridharan, Ranjani
2020-02-20 1:41 ` Kuninori Morimoto
2020-02-20 1:57 ` Sridharan, Ranjani
2020-02-20 3:01 ` Kuninori Morimoto
2020-02-20 9:33 ` [PATCH] ASoC: soc-pcm: Revert "call snd_soc_component_open/close() once" Kai Vehmanen
2020-02-21 1:13 ` Kuninori Morimoto
2020-02-21 11:09 ` Kai Vehmanen
2020-02-25 0:41 ` Kuninori Morimoto
2020-02-26 0:55 ` Kuninori Morimoto
2020-02-26 17:36 ` Mark Brown
2020-02-27 0:11 ` Kuninori Morimoto
2020-02-27 9:41 ` Kai Vehmanen [this message]
2020-02-28 0:46 ` Kuninori Morimoto
2020-02-28 6:27 ` Kuninori Morimoto
2020-02-28 7:57 ` Kuninori Morimoto
2020-02-28 12:23 ` Kai Vehmanen
2020-03-02 0:29 ` Kuninori Morimoto
2020-03-02 18:22 ` Kai Vehmanen
2020-03-03 0:43 ` Kuninori Morimoto
2020-03-03 19:48 ` Kai Vehmanen
2020-03-04 0:11 ` Kuninori Morimoto
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=alpine.DEB.2.21.2002271110010.2957@eliteleevi.tm.intel.com \
--to=kai.vehmanen@linux.intel.com \
--cc=alsa-devel@alsa-project.org \
--cc=broonie@kernel.org \
--cc=digetx@gmail.com \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=pierre-louis.bossart@linux.intel.com \
--cc=ranjani.sridharan@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.