Message ID | 87zh9v1okl.wl-kuninori.morimoto.gx@renesas.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ASoC: add soc-card | expand |
On 5/25/20 8:18 PM, Kuninori Morimoto wrote: > > From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > > We have bit field to control snd_soc_card. > Let's add probed field on it instead of local variable. > > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > --- > include/sound/soc.h | 1 + > sound/soc/soc-core.c | 18 ++++++++---------- > 2 files changed, 9 insertions(+), 10 deletions(-) > > diff --git a/include/sound/soc.h b/include/sound/soc.h > index 060c01c32547..74868436ac79 100644 > --- a/include/sound/soc.h > +++ b/include/sound/soc.h > @@ -1096,6 +1096,7 @@ struct snd_soc_card { > unsigned int topology_shortname_created:1; > unsigned int fully_routed:1; > unsigned int disable_route_checks:1; > + unsigned int probed:1; > > void *drvdata; > }; > diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c > index 02147acf6547..7cfb3ee6ff4f 100644 > --- a/sound/soc/soc-core.c > +++ b/sound/soc/soc-core.c > @@ -1723,8 +1723,7 @@ static void __soc_setup_card_name(char *name, int len, > } > } > > -static void soc_cleanup_card_resources(struct snd_soc_card *card, > - int card_probed) > +static void soc_cleanup_card_resources(struct snd_soc_card *card) > { > struct snd_soc_pcm_runtime *rtd, *n; > > @@ -1748,8 +1747,9 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card, > soc_cleanup_card_debugfs(card); > > /* remove the card */ > - if (card_probed && card->remove) > + if (card->probed && card->remove) > card->remove(card); > + card->probed = 0; > > if (card->snd_card) { > snd_card_free(card->snd_card); > @@ -1760,12 +1760,10 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card, > static void snd_soc_unbind_card(struct snd_soc_card *card, bool unregister) > { > if (card->instantiated) { > - int card_probed = 1; > - This looks like a change, now soc_cleanup_card_resources() is called without setting the card_probed bitfield? everywhere else I see a 1:1 mapping between variable and bitfield usage, not here, is this intentional? > card->instantiated = false; > snd_soc_flush_all_delayed_work(card); > > - soc_cleanup_card_resources(card, card_probed); > + soc_cleanup_card_resources(card); > if (!unregister) > list_add(&card->list, &unbind_card_list); > } else { > @@ -1779,7 +1777,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card) > struct snd_soc_pcm_runtime *rtd; > struct snd_soc_component *component; > struct snd_soc_dai_link *dai_link; > - int ret, i, card_probed = 0; > + int ret, i; > > mutex_lock(&client_mutex); > mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT); > @@ -1831,7 +1829,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card) > ret = card->probe(card); > if (ret < 0) > goto probe_end; > - card_probed = 1; > + card->probed = 1; > } > > /* probe all components used by DAI links on this card */ > @@ -1923,7 +1921,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card) > goto probe_end; > } > } > - card_probed = 1; > + card->probed = 1; > > snd_soc_dapm_new_widgets(card); > > @@ -1945,7 +1943,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card) > > probe_end: > if (ret < 0) > - soc_cleanup_card_resources(card, card_probed); > + soc_cleanup_card_resources(card); > > mutex_unlock(&card->mutex); > mutex_unlock(&client_mutex); >
Hi Pierre-Louis Thank you for the review > > From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > > > > We have bit field to control snd_soc_card. > > Let's add probed field on it instead of local variable. > > > > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > > --- (snip) > > @@ -1760,12 +1760,10 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card, > > static void snd_soc_unbind_card(struct snd_soc_card *card, bool unregister) > > { > > if (card->instantiated) { > > - int card_probed = 1; > > - > > This looks like a change, now soc_cleanup_card_resources() is called > without setting the card_probed bitfield? > > everywhere else I see a 1:1 mapping between variable and bitfield > usage, not here, is this intentional? This is a little bit confusable point for reviewing. I will explain, so, please double check it. This "soc_cleanup_card_resources()" will be called from snd_soc_unbind_card() as "formal cleanup" or, snd_soc_bind_card() as "error handling" (D). For "error handling" purpose, it needed to have "card_probed" flags as parameter. This "card->instantiated" will be set at (A) if all probe functions were called (B) without error. By this patch, "probed" is handled by "card". Thus, it already has card->probed flag if card has instantiated flag. static int snd_soc_bind_card(struct snd_soc_card *card) { ... (B) ret = snd_soc_card_probe(card); if (ret < 0) goto probe_end; ... (B) ret = snd_soc_card_late_probe(card); if (ret < 0) goto probe_end; ... (A) card->instantiated = 1; ... probe_end: if (ret < 0) (D) soc_cleanup_card_resources(); ... } But indeed patch and log are confusable. I will try to add such explanation at git-log area. Thank you for your help !! Best regards --- Kuninori Morimoto
diff --git a/include/sound/soc.h b/include/sound/soc.h index 060c01c32547..74868436ac79 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -1096,6 +1096,7 @@ struct snd_soc_card { unsigned int topology_shortname_created:1; unsigned int fully_routed:1; unsigned int disable_route_checks:1; + unsigned int probed:1; void *drvdata; }; diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index 02147acf6547..7cfb3ee6ff4f 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -1723,8 +1723,7 @@ static void __soc_setup_card_name(char *name, int len, } } -static void soc_cleanup_card_resources(struct snd_soc_card *card, - int card_probed) +static void soc_cleanup_card_resources(struct snd_soc_card *card) { struct snd_soc_pcm_runtime *rtd, *n; @@ -1748,8 +1747,9 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card, soc_cleanup_card_debugfs(card); /* remove the card */ - if (card_probed && card->remove) + if (card->probed && card->remove) card->remove(card); + card->probed = 0; if (card->snd_card) { snd_card_free(card->snd_card); @@ -1760,12 +1760,10 @@ static void soc_cleanup_card_resources(struct snd_soc_card *card, static void snd_soc_unbind_card(struct snd_soc_card *card, bool unregister) { if (card->instantiated) { - int card_probed = 1; - card->instantiated = false; snd_soc_flush_all_delayed_work(card); - soc_cleanup_card_resources(card, card_probed); + soc_cleanup_card_resources(card); if (!unregister) list_add(&card->list, &unbind_card_list); } else { @@ -1779,7 +1777,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card) struct snd_soc_pcm_runtime *rtd; struct snd_soc_component *component; struct snd_soc_dai_link *dai_link; - int ret, i, card_probed = 0; + int ret, i; mutex_lock(&client_mutex); mutex_lock_nested(&card->mutex, SND_SOC_CARD_CLASS_INIT); @@ -1831,7 +1829,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card) ret = card->probe(card); if (ret < 0) goto probe_end; - card_probed = 1; + card->probed = 1; } /* probe all components used by DAI links on this card */ @@ -1923,7 +1921,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card) goto probe_end; } } - card_probed = 1; + card->probed = 1; snd_soc_dapm_new_widgets(card); @@ -1945,7 +1943,7 @@ static int snd_soc_bind_card(struct snd_soc_card *card) probe_end: if (ret < 0) - soc_cleanup_card_resources(card, card_probed); + soc_cleanup_card_resources(card); mutex_unlock(&card->mutex); mutex_unlock(&client_mutex);