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

Péter Ujfalusi peter.ujfalusi at linux.intel.com
Thu Feb 17 08:17:18 CET 2022



On 16/02/2022 15:32, Kai Vehmanen wrote:
> 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.

Github lost my Reviewed-by...

Reviewed-by: Peter Ujfalusi <peter.ujfalusi at linux.intel.com>

> 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(+)
> 
> V1->V2:
>   - correct patch title to have "ASoC: SOF: " prefix (reported
>     by Amadeusz)
> 
> 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

-- 
Péter


More information about the Alsa-devel mailing list