All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dan Carpenter <dan.carpenter@oracle.com>
To: kbuild@01.org, Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Cc: alsa-devel@alsa-project.org, Mark Brown <broonie@kernel.org>,
	kbuild-all@01.org
Subject: [asoc:for-5.1 329/329] sound/soc/soc-pcm.c:659 soc_pcm_open() warn: inconsistent returns 'mutex:&rtd->pcm_mutex'.
Date: Mon, 8 Apr 2019 21:29:35 +0300	[thread overview]
Message-ID: <20190408182935.GI6070@kadam> (raw)

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-5.1
head:   52034add758e268c39110f33d46e2a9492e82aef
commit: 52034add758e268c39110f33d46e2a9492e82aef [329/329] ASoC: pcm: update module refcount if module_get_upon_open is set

smatch warnings:
sound/soc/soc-pcm.c:659 soc_pcm_open() warn: inconsistent returns 'mutex:&rtd->pcm_mutex'.
  Locked on:   line 522
  Unlocked on: line 622

# https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git/commit/?id=52034add758e268c39110f33d46e2a9492e82aef
git remote add asoc https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
git remote update asoc
git checkout 52034add758e268c39110f33d46e2a9492e82aef
vim +659 sound/soc/soc-pcm.c

244e2936 Charles Keepax     2018-06-19  474  
58ba9b25 Mark Brown         2012-01-16  475  /*
ddee627c Liam Girdwood      2011-06-09  476   * Called by ALSA when a PCM substream is opened, the runtime->hw record is
ddee627c Liam Girdwood      2011-06-09  477   * then initialized and any private data can be allocated. This also calls
ef050bec Charles Keepax     2018-04-24  478   * startup for the cpu DAI, component, machine and codec DAI.
ddee627c Liam Girdwood      2011-06-09  479   */
ddee627c Liam Girdwood      2011-06-09  480  static int soc_pcm_open(struct snd_pcm_substream *substream)
ddee627c Liam Girdwood      2011-06-09  481  {
ddee627c Liam Girdwood      2011-06-09  482  	struct snd_soc_pcm_runtime *rtd = substream->private_data;
ddee627c Liam Girdwood      2011-06-09  483  	struct snd_pcm_runtime *runtime = substream->runtime;
90be711e Kuninori Morimoto  2017-08-08  484  	struct snd_soc_component *component;
90be711e Kuninori Morimoto  2017-08-08  485  	struct snd_soc_rtdcom_list *rtdcom;
ddee627c Liam Girdwood      2011-06-09  486  	struct snd_soc_dai *cpu_dai = rtd->cpu_dai;
2e5894d7 Benoit Cousson     2014-07-08  487  	struct snd_soc_dai *codec_dai;
2e5894d7 Benoit Cousson     2014-07-08  488  	const char *codec_dai_name = "multicodec";
244e2936 Charles Keepax     2018-06-19  489  	int i, ret = 0;
ddee627c Liam Girdwood      2011-06-09  490  
988e8cc4 Nicolin Chen       2013-11-04  491  	pinctrl_pm_select_default_state(cpu_dai->dev);
0b7990e3 Kuninori Morimoto  2018-09-03  492  	for_each_rtd_codec_dai(rtd, i, codec_dai)
0b7990e3 Kuninori Morimoto  2018-09-03  493  		pinctrl_pm_select_default_state(codec_dai->dev);
90be711e Kuninori Morimoto  2017-08-08  494  
90be711e Kuninori Morimoto  2017-08-08  495  	for_each_rtdcom(rtd, rtdcom) {
90be711e Kuninori Morimoto  2017-08-08  496  		component = rtdcom->component;
90be711e Kuninori Morimoto  2017-08-08  497  
90be711e Kuninori Morimoto  2017-08-08  498  		pm_runtime_get_sync(component->dev);
90be711e Kuninori Morimoto  2017-08-08  499  	}
d6652ef8 Mark Brown         2011-12-03  500  
b8c0dab9 Liam Girdwood      2011-06-09  501  	mutex_lock_nested(&rtd->pcm_mutex, rtd->pcm_subclass);
                                                                  ^^^^^^^^^^^^^^^

ddee627c Liam Girdwood      2011-06-09  502  
ddee627c Liam Girdwood      2011-06-09  503  	/* startup the audio subsystem */
9900a422 Kuninori Morimoto  2017-09-25  504  	if (cpu_dai->driver->ops->startup) {
ddee627c Liam Girdwood      2011-06-09  505  		ret = cpu_dai->driver->ops->startup(substream, cpu_dai);
ddee627c Liam Girdwood      2011-06-09  506  		if (ret < 0) {
103d84a3 Liam Girdwood      2012-11-19  507  			dev_err(cpu_dai->dev, "ASoC: can't open interface"
103d84a3 Liam Girdwood      2012-11-19  508  				" %s: %d\n", cpu_dai->name, ret);
ddee627c Liam Girdwood      2011-06-09  509  			goto out;
                                                                ^^^^^^^^^

ddee627c Liam Girdwood      2011-06-09  510  		}
ddee627c Liam Girdwood      2011-06-09  511  	}
ddee627c Liam Girdwood      2011-06-09  512  
b8135864 Kuninori Morimoto  2017-10-11  513  	for_each_rtdcom(rtd, rtdcom) {
b8135864 Kuninori Morimoto  2017-10-11  514  		component = rtdcom->component;
b8135864 Kuninori Morimoto  2017-10-11  515  
b8135864 Kuninori Morimoto  2017-10-11  516  		if (!component->driver->ops ||
b8135864 Kuninori Morimoto  2017-10-11  517  		    !component->driver->ops->open)
b8135864 Kuninori Morimoto  2017-10-11  518  			continue;
b8135864 Kuninori Morimoto  2017-10-11  519  
52034add Ranjani Sridharan  2019-04-05  520  		if (component->driver->module_get_upon_open &&
52034add Ranjani Sridharan  2019-04-05  521  		    !try_module_get(component->dev->driver->owner))
52034add Ranjani Sridharan  2019-04-05  522  			return -ENODEV;
                                                                ^^^^^^^^^^^^^^^
We need some error handling before returning.

52034add Ranjani Sridharan  2019-04-05  523  
244e2936 Charles Keepax     2018-06-19  524  		ret = component->driver->ops->open(substream);
244e2936 Charles Keepax     2018-06-19  525  		if (ret < 0) {
b8135864 Kuninori Morimoto  2017-10-11  526  			dev_err(component->dev,
b8135864 Kuninori Morimoto  2017-10-11  527  				"ASoC: can't open component %s: %d\n",
244e2936 Charles Keepax     2018-06-19  528  				component->name, ret);
244e2936 Charles Keepax     2018-06-19  529  			goto component_err;
b8135864 Kuninori Morimoto  2017-10-11  530  		}
b8135864 Kuninori Morimoto  2017-10-11  531  	}
244e2936 Charles Keepax     2018-06-19  532  	component = NULL;
b8135864 Kuninori Morimoto  2017-10-11  533  
0b7990e3 Kuninori Morimoto  2018-09-03  534  	for_each_rtd_codec_dai(rtd, i, codec_dai) {
9900a422 Kuninori Morimoto  2017-09-25  535  		if (codec_dai->driver->ops->startup) {
2e5894d7 Benoit Cousson     2014-07-08  536  			ret = codec_dai->driver->ops->startup(substream,
2e5894d7 Benoit Cousson     2014-07-08  537  							      codec_dai);
ddee627c Liam Girdwood      2011-06-09  538  			if (ret < 0) {
2e5894d7 Benoit Cousson     2014-07-08  539  				dev_err(codec_dai->dev,
2e5894d7 Benoit Cousson     2014-07-08  540  					"ASoC: can't open codec %s: %d\n",
2e5894d7 Benoit Cousson     2014-07-08  541  					codec_dai->name, ret);
ddee627c Liam Girdwood      2011-06-09  542  				goto codec_dai_err;
ddee627c Liam Girdwood      2011-06-09  543  			}
ddee627c Liam Girdwood      2011-06-09  544  		}
ddee627c Liam Girdwood      2011-06-09  545  
2e5894d7 Benoit Cousson     2014-07-08  546  		if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
2e5894d7 Benoit Cousson     2014-07-08  547  			codec_dai->tx_mask = 0;
2e5894d7 Benoit Cousson     2014-07-08  548  		else
2e5894d7 Benoit Cousson     2014-07-08  549  			codec_dai->rx_mask = 0;
2e5894d7 Benoit Cousson     2014-07-08  550  	}
2e5894d7 Benoit Cousson     2014-07-08  551  
75ab9eb6 Kuninori Morimoto  2017-09-26  552  	if (rtd->dai_link->ops->startup) {
ddee627c Liam Girdwood      2011-06-09  553  		ret = rtd->dai_link->ops->startup(substream);
ddee627c Liam Girdwood      2011-06-09  554  		if (ret < 0) {
103d84a3 Liam Girdwood      2012-11-19  555  			pr_err("ASoC: %s startup failed: %d\n",
25bfe662 Mark Brown         2012-02-01  556  			       rtd->dai_link->name, ret);
ddee627c Liam Girdwood      2011-06-09  557  			goto machine_err;
ddee627c Liam Girdwood      2011-06-09  558  		}
ddee627c Liam Girdwood      2011-06-09  559  	}
ddee627c Liam Girdwood      2011-06-09  560  
01d7584c Liam Girdwood      2012-04-25  561  	/* Dynamic PCM DAI links compat checks use dynamic capabilities */
01d7584c Liam Girdwood      2012-04-25  562  	if (rtd->dai_link->dynamic || rtd->dai_link->no_pcm)
01d7584c Liam Girdwood      2012-04-25  563  		goto dynamic;
01d7584c Liam Girdwood      2012-04-25  564  
ddee627c Liam Girdwood      2011-06-09  565  	/* Check that the codec and cpu DAIs are compatible */
2e5894d7 Benoit Cousson     2014-07-08  566  	soc_pcm_init_runtime_hw(substream);
2e5894d7 Benoit Cousson     2014-07-08  567  
2e5894d7 Benoit Cousson     2014-07-08  568  	if (rtd->num_codecs == 1)
2e5894d7 Benoit Cousson     2014-07-08  569  		codec_dai_name = rtd->codec_dai->name;
ddee627c Liam Girdwood      2011-06-09  570  
62e5f676 Lars-Peter Clausen 2013-11-30  571  	if (soc_pcm_has_symmetry(substream))
62e5f676 Lars-Peter Clausen 2013-11-30  572  		runtime->hw.info |= SNDRV_PCM_INFO_JOINT_DUPLEX;
62e5f676 Lars-Peter Clausen 2013-11-30  573  
ddee627c Liam Girdwood      2011-06-09  574  	ret = -EINVAL;
ddee627c Liam Girdwood      2011-06-09  575  	if (!runtime->hw.rates) {
103d84a3 Liam Girdwood      2012-11-19  576  		printk(KERN_ERR "ASoC: %s <-> %s No matching rates\n",
2e5894d7 Benoit Cousson     2014-07-08  577  			codec_dai_name, cpu_dai->name);
ddee627c Liam Girdwood      2011-06-09  578  		goto config_err;
ddee627c Liam Girdwood      2011-06-09  579  	}
ddee627c Liam Girdwood      2011-06-09  580  	if (!runtime->hw.formats) {
103d84a3 Liam Girdwood      2012-11-19  581  		printk(KERN_ERR "ASoC: %s <-> %s No matching formats\n",
2e5894d7 Benoit Cousson     2014-07-08  582  			codec_dai_name, cpu_dai->name);
ddee627c Liam Girdwood      2011-06-09  583  		goto config_err;
ddee627c Liam Girdwood      2011-06-09  584  	}
ddee627c Liam Girdwood      2011-06-09  585  	if (!runtime->hw.channels_min || !runtime->hw.channels_max ||
ddee627c Liam Girdwood      2011-06-09  586  	    runtime->hw.channels_min > runtime->hw.channels_max) {
103d84a3 Liam Girdwood      2012-11-19  587  		printk(KERN_ERR "ASoC: %s <-> %s No matching channels\n",
2e5894d7 Benoit Cousson     2014-07-08  588  				codec_dai_name, cpu_dai->name);
ddee627c Liam Girdwood      2011-06-09  589  		goto config_err;
ddee627c Liam Girdwood      2011-06-09  590  	}
ddee627c Liam Girdwood      2011-06-09  591  
c8dd1fec Benoit Cousson     2014-07-01  592  	soc_pcm_apply_msb(substream);
58ba9b25 Mark Brown         2012-01-16  593  
ddee627c Liam Girdwood      2011-06-09  594  	/* Symmetry only applies if we've already got an active stream. */
17841020 Dong Aisheng       2011-08-29  595  	if (cpu_dai->active) {
17841020 Dong Aisheng       2011-08-29  596  		ret = soc_pcm_apply_symmetry(substream, cpu_dai);
17841020 Dong Aisheng       2011-08-29  597  		if (ret != 0)
17841020 Dong Aisheng       2011-08-29  598  			goto config_err;
17841020 Dong Aisheng       2011-08-29  599  	}
17841020 Dong Aisheng       2011-08-29  600  
0b7990e3 Kuninori Morimoto  2018-09-03  601  	for_each_rtd_codec_dai(rtd, i, codec_dai) {
0b7990e3 Kuninori Morimoto  2018-09-03  602  		if (codec_dai->active) {
0b7990e3 Kuninori Morimoto  2018-09-03  603  			ret = soc_pcm_apply_symmetry(substream, codec_dai);
ddee627c Liam Girdwood      2011-06-09  604  			if (ret != 0)
ddee627c Liam Girdwood      2011-06-09  605  				goto config_err;
ddee627c Liam Girdwood      2011-06-09  606  		}
2e5894d7 Benoit Cousson     2014-07-08  607  	}
ddee627c Liam Girdwood      2011-06-09  608  
103d84a3 Liam Girdwood      2012-11-19  609  	pr_debug("ASoC: %s <-> %s info:\n",
2e5894d7 Benoit Cousson     2014-07-08  610  			codec_dai_name, cpu_dai->name);
103d84a3 Liam Girdwood      2012-11-19  611  	pr_debug("ASoC: rate mask 0x%x\n", runtime->hw.rates);
103d84a3 Liam Girdwood      2012-11-19  612  	pr_debug("ASoC: min ch %d max ch %d\n", runtime->hw.channels_min,
ddee627c Liam Girdwood      2011-06-09  613  		 runtime->hw.channels_max);
103d84a3 Liam Girdwood      2012-11-19  614  	pr_debug("ASoC: min rate %d max rate %d\n", runtime->hw.rate_min,
ddee627c Liam Girdwood      2011-06-09  615  		 runtime->hw.rate_max);
ddee627c Liam Girdwood      2011-06-09  616  
01d7584c Liam Girdwood      2012-04-25  617  dynamic:
24894b76 Lars-Peter Clausen 2014-03-05  618  
24894b76 Lars-Peter Clausen 2014-03-05  619  	snd_soc_runtime_activate(rtd, substream->stream);
24894b76 Lars-Peter Clausen 2014-03-05  620  
b8c0dab9 Liam Girdwood      2011-06-09  621  	mutex_unlock(&rtd->pcm_mutex);
ddee627c Liam Girdwood      2011-06-09  622  	return 0;
ddee627c Liam Girdwood      2011-06-09  623  
ddee627c Liam Girdwood      2011-06-09  624  config_err:
75ab9eb6 Kuninori Morimoto  2017-09-26  625  	if (rtd->dai_link->ops->shutdown)
ddee627c Liam Girdwood      2011-06-09  626  		rtd->dai_link->ops->shutdown(substream);
ddee627c Liam Girdwood      2011-06-09  627  
ddee627c Liam Girdwood      2011-06-09  628  machine_err:
2e5894d7 Benoit Cousson     2014-07-08  629  	i = rtd->num_codecs;
2e5894d7 Benoit Cousson     2014-07-08  630  
2e5894d7 Benoit Cousson     2014-07-08  631  codec_dai_err:
6d11b128 Kuninori Morimoto  2018-09-18  632  	for_each_rtd_codec_dai_rollback(rtd, i, codec_dai) {
ddee627c Liam Girdwood      2011-06-09  633  		if (codec_dai->driver->ops->shutdown)
ddee627c Liam Girdwood      2011-06-09  634  			codec_dai->driver->ops->shutdown(substream, codec_dai);
2e5894d7 Benoit Cousson     2014-07-08  635  	}
ddee627c Liam Girdwood      2011-06-09  636  
b8135864 Kuninori Morimoto  2017-10-11  637  component_err:
244e2936 Charles Keepax     2018-06-19  638  	soc_pcm_components_close(substream, component);
b8135864 Kuninori Morimoto  2017-10-11  639  
ddee627c Liam Girdwood      2011-06-09  640  	if (cpu_dai->driver->ops->shutdown)
ddee627c Liam Girdwood      2011-06-09  641  		cpu_dai->driver->ops->shutdown(substream, cpu_dai);
ddee627c Liam Girdwood      2011-06-09  642  out:
b8c0dab9 Liam Girdwood      2011-06-09  643  	mutex_unlock(&rtd->pcm_mutex);
d6652ef8 Mark Brown         2011-12-03  644  
90be711e Kuninori Morimoto  2017-08-08  645  	for_each_rtdcom(rtd, rtdcom) {
90be711e Kuninori Morimoto  2017-08-08  646  		component = rtdcom->component;
90be711e Kuninori Morimoto  2017-08-08  647  
90be711e Kuninori Morimoto  2017-08-08  648  		pm_runtime_mark_last_busy(component->dev);
90be711e Kuninori Morimoto  2017-08-08  649  		pm_runtime_put_autosuspend(component->dev);
3f809783 Sanyog Kale        2016-01-05  650  	}
3f809783 Sanyog Kale        2016-01-05  651  
0b7990e3 Kuninori Morimoto  2018-09-03  652  	for_each_rtd_codec_dai(rtd, i, codec_dai) {
0b7990e3 Kuninori Morimoto  2018-09-03  653  		if (!codec_dai->active)
0b7990e3 Kuninori Morimoto  2018-09-03  654  			pinctrl_pm_select_sleep_state(codec_dai->dev);
2e5894d7 Benoit Cousson     2014-07-08  655  	}
988e8cc4 Nicolin Chen       2013-11-04  656  	if (!cpu_dai->active)
988e8cc4 Nicolin Chen       2013-11-04  657  		pinctrl_pm_select_sleep_state(cpu_dai->dev);
d6652ef8 Mark Brown         2011-12-03  658  
ddee627c Liam Girdwood      2011-06-09 @659  	return ret;
ddee627c Liam Girdwood      2011-06-09  660  }
ddee627c Liam Girdwood      2011-06-09  661  

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

                 reply	other threads:[~2019-04-08 18:29 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

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=20190408182935.GI6070@kadam \
    --to=dan.carpenter@oracle.com \
    --cc=alsa-devel@alsa-project.org \
    --cc=broonie@kernel.org \
    --cc=kbuild-all@01.org \
    --cc=kbuild@01.org \
    --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.