Message ID | 20240328135233.1204694-1-rodrigo.vivi@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | [topic/core-for-CI] ASoC: SOF: Core: Add remove_late() to sof_init_environment failure path | expand |
On Thu, Mar 28, 2024 at 09:52:33AM -0400, Rodrigo Vivi wrote: >From: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com> > >In cases where the sof driver is unable to find the firmware and/or >topology file [1], it exits without releasing the i915 runtime >pm wakeref [2]. This results in dmesg warnings[3] during >suspend/resume or driver unbind. Add remove_late() to the failure path >of sof_init_environment so that i915 wakeref is released appropriately > >[1] > >[ 8.990366] sof-audio-pci-intel-mtl 0000:00:1f.3: SOF firmware and/or topology file not found. >[ 8.990396] sof-audio-pci-intel-mtl 0000:00:1f.3: Supported default profiles >[ 8.990398] sof-audio-pci-intel-mtl 0000:00:1f.3: - ipc type 1 (Requested): >[ 8.990399] sof-audio-pci-intel-mtl 0000:00:1f.3: Firmware file: intel/sof-ipc4/mtl/sof-mtl.ri >[ 8.990401] sof-audio-pci-intel-mtl 0000:00:1f.3: Topology file: intel/sof-ace-tplg/sof-mtl-rt711-2ch.tplg >[ 8.990402] sof-audio-pci-intel-mtl 0000:00:1f.3: Check if you have 'sof-firmware' package installed. >[ 8.990403] sof-audio-pci-intel-mtl 0000:00:1f.3: Optionally it can be manually downloaded from: >[ 8.990404] sof-audio-pci-intel-mtl 0000:00:1f.3: https://github.com/thesofproject/sof-bin/ >[ 8.999088] sof-audio-pci-intel-mtl 0000:00:1f.3: error: sof_probe_work failed err: -2 > >[2] > >ref_tracker: 0000:00:02.0@ffff9b8511b6a378 has 1/5 users at > track_intel_runtime_pm_wakeref.part.0+0x36/0x70 [i915] > __intel_runtime_pm_get+0x51/0xb0 [i915] > intel_runtime_pm_get+0x17/0x20 [i915] > intel_display_power_get+0x2f/0x70 [i915] > i915_audio_component_get_power+0x23/0x120 [i915] > snd_hdac_display_power+0x89/0x130 [snd_hda_core] > hda_codec_i915_init+0x3f/0x50 [snd_sof_intel_hda] > hda_dsp_probe_early+0x170/0x250 [snd_sof_intel_hda_common] > snd_sof_device_probe+0x224/0x320 [snd_sof] > sof_pci_probe+0x15b/0x220 [snd_sof_pci] > hda_pci_intel_probe+0x30/0x70 [snd_sof_intel_hda_common] > local_pci_probe+0x4c/0xb0 > pci_device_probe+0xcc/0x250 > really_probe+0x18e/0x420 > __driver_probe_device+0x7e/0x170 > driver_probe_device+0x23/0xa0 > >[3] >[ 484.105070] ------------[ cut here ]------------ >[ 484.108238] thunderbolt 0000:00:0d.2: PM: pci_pm_suspend_late+0x0/0x50 returned 0 after 0 usecs >[ 484.117106] i915 0000:00:02.0: i915 raw-wakerefs=1 wakelocks=1 on cleanup >[ 484.792005] WARNING: CPU: 2 PID: 2405 at drivers/gpu/drm/i915/intel_runtime_pm.c:444 intel_runtime_pm_driver_release+0x6c/0x80 > >Signed-off-by: Chaitanya Kumar Borah <chaitanya.kumar.borah@intel.com> >Tested-by: Rodrigo Vivi <rodrigo.vivi@intel.com> >Reviewed-by: Rodrigo Vivi <rodrigo.vivi@intel.com> >[This commit is still under review on the sof tree, but likely targeting 6.10 >Adding to topic branch to unblock RPM in LNL VLK-56970] >Link: https://github.com/thesofproject/linux/pull/4878 >Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Acked-by: Lucas De Marchi <lucas.demarchi@intel.com> to merge in our topic/core-for-CI branch. thanks Lucas De Marchi >--- > sound/soc/sof/core.c | 14 ++++++++------ > 1 file changed, 8 insertions(+), 6 deletions(-) > >diff --git a/sound/soc/sof/core.c b/sound/soc/sof/core.c >index 425b023b03b4..3e41821562f0 100644 >--- a/sound/soc/sof/core.c >+++ b/sound/soc/sof/core.c >@@ -339,8 +339,7 @@ static int sof_init_environment(struct snd_sof_dev *sdev) > ret = snd_sof_probe(sdev); > if (ret < 0) { > dev_err(sdev->dev, "failed to probe DSP %d\n", ret); >- sof_ops_free(sdev); >- return ret; >+ goto err_sof_probe; > } > > /* check machine info */ >@@ -358,15 +357,18 @@ static int sof_init_environment(struct snd_sof_dev *sdev) > ret = validate_sof_ops(sdev); > if (ret < 0) { > snd_sof_remove(sdev); >+ snd_sof_remove_late(sdev); > return ret; > } > } > >+ return 0; >+ > err_machine_check: >- if (ret) { >- snd_sof_remove(sdev); >- sof_ops_free(sdev); >- } >+ snd_sof_remove(sdev); >+err_sof_probe: >+ snd_sof_remove_late(sdev); >+ sof_ops_free(sdev); > > return ret; > } >-- >2.44.0 >
diff --git a/sound/soc/sof/core.c b/sound/soc/sof/core.c index 425b023b03b4..3e41821562f0 100644 --- a/sound/soc/sof/core.c +++ b/sound/soc/sof/core.c @@ -339,8 +339,7 @@ static int sof_init_environment(struct snd_sof_dev *sdev) ret = snd_sof_probe(sdev); if (ret < 0) { dev_err(sdev->dev, "failed to probe DSP %d\n", ret); - sof_ops_free(sdev); - return ret; + goto err_sof_probe; } /* check machine info */ @@ -358,15 +357,18 @@ static int sof_init_environment(struct snd_sof_dev *sdev) ret = validate_sof_ops(sdev); if (ret < 0) { snd_sof_remove(sdev); + snd_sof_remove_late(sdev); return ret; } } + return 0; + err_machine_check: - if (ret) { - snd_sof_remove(sdev); - sof_ops_free(sdev); - } + snd_sof_remove(sdev); +err_sof_probe: + snd_sof_remove_late(sdev); + sof_ops_free(sdev); return ret; }