mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 15:41:52 +02:00
ASoC: SOF: Various runtime pm fixes, improvements
Merge series from Peter Ujfalusi <peter.ujfalusi@linux.intel.com>:
Three patch to correct error path PM runtime handling in few places.
Regards,
Peter
---
Pierre-Louis Bossart (3):
ASoC: SOF: debug: conditionally bump runtime_pm counter on exceptions
ASoC: SOF: pcm: fix pm_runtime imbalance in error handling
ASoC: SOF: sof-client-probes: fix pm_runtime imbalance in error
handling
sound/soc/sof/debug.c | 4 ++--
sound/soc/sof/pcm.c | 11 ++++++-----
sound/soc/sof/sof-client-probes.c | 14 ++++++++------
3 files changed, 16 insertions(+), 13 deletions(-)
--
2.40.1
This commit is contained in:
commit
aa70f36fe6
|
|
@ -438,8 +438,8 @@ void snd_sof_handle_fw_exception(struct snd_sof_dev *sdev, const char *msg)
|
|||
/* should we prevent DSP entering D3 ? */
|
||||
if (!sdev->ipc_dump_printed)
|
||||
dev_info(sdev->dev,
|
||||
"preventing DSP entering D3 state to preserve context\n");
|
||||
pm_runtime_get_noresume(sdev->dev);
|
||||
"Attempting to prevent DSP from entering D3 state to preserve context\n");
|
||||
pm_runtime_get_if_in_use(sdev->dev);
|
||||
}
|
||||
|
||||
/* dump vital information to the logs */
|
||||
|
|
|
|||
|
|
@ -643,16 +643,17 @@ static int sof_pcm_probe(struct snd_soc_component *component)
|
|||
"%s/%s",
|
||||
plat_data->tplg_filename_prefix,
|
||||
plat_data->tplg_filename);
|
||||
if (!tplg_filename)
|
||||
return -ENOMEM;
|
||||
|
||||
ret = snd_sof_load_topology(component, tplg_filename);
|
||||
if (ret < 0) {
|
||||
dev_err(component->dev, "error: failed to load DSP topology %d\n",
|
||||
ret);
|
||||
return ret;
|
||||
if (!tplg_filename) {
|
||||
ret = -ENOMEM;
|
||||
goto pm_error;
|
||||
}
|
||||
|
||||
ret = snd_sof_load_topology(component, tplg_filename);
|
||||
if (ret < 0)
|
||||
dev_err(component->dev, "error: failed to load DSP topology %d\n",
|
||||
ret);
|
||||
|
||||
pm_error:
|
||||
pm_runtime_mark_last_busy(component->dev);
|
||||
pm_runtime_put_autosuspend(component->dev);
|
||||
|
||||
|
|
|
|||
|
|
@ -218,12 +218,7 @@ static ssize_t sof_probes_dfs_points_read(struct file *file, char __user *to,
|
|||
|
||||
ret = ipc->points_info(cdev, &desc, &num_desc);
|
||||
if (ret < 0)
|
||||
goto exit;
|
||||
|
||||
pm_runtime_mark_last_busy(dev);
|
||||
err = pm_runtime_put_autosuspend(dev);
|
||||
if (err < 0)
|
||||
dev_err_ratelimited(dev, "debugfs read failed to idle %d\n", err);
|
||||
goto pm_error;
|
||||
|
||||
for (i = 0; i < num_desc; i++) {
|
||||
offset = strlen(buf);
|
||||
|
|
@ -241,6 +236,13 @@ static ssize_t sof_probes_dfs_points_read(struct file *file, char __user *to,
|
|||
ret = simple_read_from_buffer(to, count, ppos, buf, strlen(buf));
|
||||
|
||||
kfree(desc);
|
||||
|
||||
pm_error:
|
||||
pm_runtime_mark_last_busy(dev);
|
||||
err = pm_runtime_put_autosuspend(dev);
|
||||
if (err < 0)
|
||||
dev_err_ratelimited(dev, "debugfs read failed to idle %d\n", err);
|
||||
|
||||
exit:
|
||||
kfree(buf);
|
||||
return ret;
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user