* [PATCH] ASoC: core: unregister clients and machine drivers in .shutdown
@ 2022-02-15 18:06 Kai Vehmanen
2022-02-16 8:38 ` Amadeusz Sławiński
0 siblings, 1 reply; 3+ messages in thread
From: Kai Vehmanen @ 2022-02-15 18:06 UTC (permalink / raw)
To: alsa-devel, broonie
Cc: kai.vehmanen, yung-chuan.liao, peter.ujfalusi, lgirdwood,
pierre-louis.bossart, ranjani.sridharan, daniel.baluta
From: Pierre-Louis Bossart <pierre-louis.bossart@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@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Kai Vehmanen <kai.vehmanen@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
--
2.35.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] ASoC: core: unregister clients and machine drivers in .shutdown
2022-02-15 18:06 [PATCH] ASoC: core: unregister clients and machine drivers in .shutdown Kai Vehmanen
@ 2022-02-16 8:38 ` Amadeusz Sławiński
2022-02-16 13:49 ` Kai Vehmanen
0 siblings, 1 reply; 3+ messages in thread
From: Amadeusz Sławiński @ 2022-02-16 8:38 UTC (permalink / raw)
To: Kai Vehmanen, alsa-devel, broonie
Cc: pierre-louis.bossart, yung-chuan.liao, peter.ujfalusi,
ranjani.sridharan, lgirdwood, daniel.baluta
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@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@linux.intel.com>
> Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
> Signed-off-by: Kai Vehmanen <kai.vehmanen@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
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] ASoC: core: unregister clients and machine drivers in .shutdown
2022-02-16 8:38 ` Amadeusz Sławiński
@ 2022-02-16 13:49 ` Kai Vehmanen
0 siblings, 0 replies; 3+ messages in thread
From: Kai Vehmanen @ 2022-02-16 13:49 UTC (permalink / raw)
To: Amadeusz Sławiński
Cc: daniel.baluta, alsa-devel, Kai Vehmanen, yung-chuan.liao,
lgirdwood, pierre-louis.bossart, broonie, ranjani.sridharan,
peter.ujfalusi
Hi,
On Wed, 16 Feb 2022, Amadeusz Sławiński wrote:
> On 2/15/2022 7:06 PM, Kai Vehmanen wrote:
>
> Nitpicking, but I guess "SOF:" got lost in title ;)
thanks Amadeusz, that's indeed true. V2 sent with the correct title.
Br, Kai
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-02-16 13:59 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-02-15 18:06 [PATCH] ASoC: core: unregister clients and machine drivers in .shutdown Kai Vehmanen
2022-02-16 8:38 ` Amadeusz Sławiński
2022-02-16 13:49 ` Kai Vehmanen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox