Message ID | 20220215180628.3893282-1-kai.vehmanen@linux.intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 83bfc7e793b555291785136c3ae86abcdc046887 |
Headers | show |
Series | ASoC: core: unregister clients and machine drivers in .shutdown | expand |
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
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
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);