[PATCH] ASoC: core: unregister clients and machine drivers in .shutdown

Amadeusz Sławiński amadeuszx.slawinski at linux.intel.com
Wed Feb 16 09:38:35 CET 2022


On 2/15/2022 7:06 PM, Kai Vehmanen wrote:

Nitpicking, but I guess "SOF:" got lost in title ;)

> From: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> 
> On a platform shutdown, the expectation for most drivers is that
> userspace tasks will release all resources. When those sequences do
> not complete, it can be the case that PCM devices exposed by ALSA
> cards are used *after* the DSP shutdown completes, leading to a
> platform hang.
> 
> When the clients and machine drivers provide an _unregister callback,
> let's invoke it in the shutdown sequence.
> 
> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> Reviewed-by: Kai Vehmanen <kai.vehmanen at linux.intel.com>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan at linux.intel.com>
> Signed-off-by: Kai Vehmanen <kai.vehmanen at linux.intel.com>
> ---
>   sound/soc/sof/core.c | 9 +++++++++
>   1 file changed, 9 insertions(+)
> 
> diff --git a/sound/soc/sof/core.c b/sound/soc/sof/core.c
> index d99ecbb4282d..2a35d8ddf43e 100644
> --- a/sound/soc/sof/core.c
> +++ b/sound/soc/sof/core.c
> @@ -463,10 +463,19 @@ EXPORT_SYMBOL(snd_sof_device_remove);
>   int snd_sof_device_shutdown(struct device *dev)
>   {
>   	struct snd_sof_dev *sdev = dev_get_drvdata(dev);
> +	struct snd_sof_pdata *pdata = sdev->pdata;
>   
>   	if (IS_ENABLED(CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE))
>   		cancel_work_sync(&sdev->probe_work);
>   
> +	/*
> +	 * make sure clients and machine driver(s) are unregistered to force
> +	 * all userspace devices to be closed prior to the DSP shutdown sequence
> +	 */
> +	sof_unregister_clients(sdev);
> +
> +	snd_sof_machine_unregister(sdev, pdata);
> +
>   	if (sdev->fw_state == SOF_FW_BOOT_COMPLETE)
>   		return snd_sof_shutdown(sdev);
>   
> 
> base-commit: f7d344a2bd5ec81fbd1ce76928fd059e57ec9bea



More information about the Alsa-devel mailing list