On 16/02/2022 15:32, Kai Vehmanen wrote: > From: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > > 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@xxxxxxxxxxxxxxx> > Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > Reviewed-by: Kai Vehmanen <kai.vehmanen@xxxxxxxxxxxxxxx> > Reviewed-by: Ranjani Sridharan <ranjani.sridharan@xxxxxxxxxxxxxxx> > Signed-off-by: Kai Vehmanen <kai.vehmanen@xxxxxxxxxxxxxxx> > --- > 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