]> git.baikalelectronics.ru Git - kernel.git/commit
ASoC: core: Fix component_list corruption when unloading modules
authorJarkko Nikula <jarkko.nikula@linux.intel.com>
Mon, 28 Apr 2014 12:30:51 +0000 (15:30 +0300)
committerMark Brown <broonie@linaro.org>
Tue, 29 Apr 2014 17:09:11 +0000 (10:09 -0700)
commiteaf654e6c8201474cf68dcf7e380c3eebf497ade
treeb3e54c8d576cf3c0a05652a0d184c286908389de
parent01f612ba664ae03653fb856956d73e43c6dbd526
ASoC: core: Fix component_list corruption when unloading modules

This fixes module unload regressions introduced by commits 8a86dee50663
("ASoC: Track which components have been registered with
snd_soc_register_component()") and 7cad16423939 ("ASoC: Let snd_soc_platform
subclass snd_soc_component").

First commit causes component_list to be corrupted when removing codec and
second when removing platform. Reason for both is that components associated
with platform or codec are never removed from the list because for them
registered_as_component field in struct snd_soc_component is always false.

Now list becomes corrupted when snd_soc_unregister_platform() or
snd_soc_unregister_codec() frees the platform or codec structure and where
the associated struct snd_soc_component is embedded.

Fix these by moving component unregistration and cleanup to a new local
function __snd_soc_unregister_component() that takes component as its
argument.

Since component is known for platforms and codecs the
__snd_soc_unregister_component() can be called directly and
snd_soc_unregister_component() takes care to find and unregister only
components that were registered using snd_soc_register_component().

Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Mark Brown <broonie@linaro.org>
sound/soc/soc-core.c