[alsa-devel] [PATCH 2/2] ASoC: pcm: update module refcount if module_get_upon_open is set
Ranjani Sridharan
ranjani.sridharan at linux.intel.com
Fri Apr 5 18:59:49 CEST 2019
On Thu, 2019-04-04 at 20:06 -0700, Ranjani Sridharan wrote:
> Setting the module_get_upon_open field for component driver
> prevents the module refcount from being incremented during
> component probe(). This could lead to the module being
> allowed to be unloaded when a pcm stream is open. So,
> if this field is set, the module's refcount should be
> incremented during pcm open to prevent module removal
> when the component is in use. And, the refcount should
> be decremented upon pcm close.
>
> Signed-off-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
> ---
> sound/soc/soc-pcm.c | 8 ++++++++
> 1 file changed, 8 insertions(+)
>
> diff --git a/sound/soc/soc-pcm.c b/sound/soc/soc-pcm.c
> index 7fe5321000e8..d84a9a5b14c0 100644
> --- a/sound/soc/soc-pcm.c
> +++ b/sound/soc/soc-pcm.c
> @@ -15,6 +15,7 @@
> #include <linux/delay.h>
> #include <linux/pinctrl/consumer.h>
> #include <linux/pm_runtime.h>
> +#include <linux/module.h>
> #include <linux/slab.h>
> #include <linux/workqueue.h>
> #include <linux/export.h>
> @@ -463,6 +464,9 @@ static int soc_pcm_components_close(struct
> snd_pcm_substream *substream,
> continue;
>
> component->driver->ops->close(substream);
> +
> + if (component->driver->module_get_upon_open)
> + module_put(component->dev->driver->owner);
I made a minor fix to align the code similar to the one in soc-core.
I've sent a V2 version of the patch set with the fix. Sorry about the
noise.
Thanks,
Ranjani
> }
>
> return 0;
> @@ -513,6 +517,10 @@ static int soc_pcm_open(struct snd_pcm_substream
> *substream)
> !component->driver->ops->open)
> continue;
>
> + if (component->driver->module_get_upon_open)
> + if (!try_module_get(component->dev->driver-
> >owner))
> + return -ENODEV;
> +
> ret = component->driver->ops->open(substream);
> if (ret < 0) {
> dev_err(component->dev,
More information about the Alsa-devel
mailing list