diff options
author | Mark Brown <broonie@kernel.org> | 2020-07-08 16:50:36 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2020-07-08 16:50:36 +0100 |
commit | 76c49909a69259c0f1fee4f88f8c326fc5efe0dd (patch) | |
tree | 05802b1a67f2a75a29d4aa049bc78555b9c4d118 /sound/soc/soc-core.c | |
parent | 81e7d4ce8bff6af7988d070db5e59525e7b31b5e (diff) | |
parent | 8bf9475fe49fa96eea57724bb04e0931d101bc5a (diff) |
Merge series "ASoC: topology: fix error handling flow" from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:
While experimenting and introducing errors in Baytrail topology files
until I got them right, I encountered multiple kernel oopses and
memory leaks. This is a first batch to harden the code, but we should
probably think of a tool to fuzz the topology...
Pierre-Louis Bossart (5):
ASoC: topology: fix kernel oops on route addition error
ASoC: topology: fix tlvs in error handling for widget_dmixer
ASoC: topology: use break on errors, not continue
ASoC: topology: factor kfree(se) in error handling
ASoC: topology: add more logs when topology load fails.
sound/soc/soc-topology.c | 97 ++++++++++++++++++++++++----------------
1 file changed, 58 insertions(+), 39 deletions(-)
base-commit: a5911ac5790acaf98c929b826b3f7b4a438f9759
--
2.25.1
Diffstat (limited to 'sound/soc/soc-core.c')
-rw-r--r-- | sound/soc/soc-core.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index adedadcb0efb..7c58e45c1c3f 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -2514,6 +2514,33 @@ int snd_soc_register_component(struct device *dev, EXPORT_SYMBOL_GPL(snd_soc_register_component); /** + * snd_soc_unregister_component_by_driver - Unregister component using a given driver + * from the ASoC core + * + * @dev: The device to unregister + * @component_driver: The component driver to unregister + */ +void snd_soc_unregister_component_by_driver(struct device *dev, + const struct snd_soc_component_driver *component_driver) +{ + struct snd_soc_component *component; + + if (!component_driver) + return; + + mutex_lock(&client_mutex); + component = snd_soc_lookup_component_nolocked(dev, component_driver->name); + if (!component) + goto out; + + snd_soc_del_component_unlocked(component); + +out: + mutex_unlock(&client_mutex); +} +EXPORT_SYMBOL_GPL(snd_soc_unregister_component_by_driver); + +/** * snd_soc_unregister_component - Unregister all related component * from the ASoC core * |