ASoC: codecs: hda: Fix RPM usage count underflow
authorCezary Rojewski <cezary.rojewski@intel.com>
Fri, 30 May 2025 14:10:17 +0000 (16:10 +0200)
committerMark Brown <broonie@kernel.org>
Mon, 2 Jun 2025 11:26:44 +0000 (12:26 +0100)
RPM manipulation in hda_codec_probe_complete()'s error path is
superfluous and leads to RPM usage count underflow if the
build-controls operation fails.

hda_codec_probe_complete() is called in:

1) hda_codec_probe() for all non-HDMI codecs
2) in card->late_probe() for HDMI codecs

Error path for hda_codec_probe() takes care of bus' RPM already.
For 2) if late_probe() fails, ASoC performs card cleanup what
triggers hda_codec_remote() - same treatment is in 1).

Fixes: b5df2a7dca1c ("ASoC: codecs: Add HD-Audio codec driver")
Reviewed-by: Amadeusz Sławiński <amadeuszx.slawinski@linux.intel.com>
Signed-off-by: Cezary Rojewski <cezary.rojewski@intel.com>
Link: https://patch.msgid.link/20250530141025.2942936-2-cezary.rojewski@intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/hda.c

index ddc00927313cfedd5f84772bc71ef9c5e2e830c6..dc7794c9ac44cedc43b4d37e2661ab6c10d8cade 100644 (file)
@@ -152,7 +152,7 @@ int hda_codec_probe_complete(struct hda_codec *codec)
        ret = snd_hda_codec_build_controls(codec);
        if (ret < 0) {
                dev_err(&hdev->dev, "unable to create controls %d\n", ret);
-               goto out;
+               return ret;
        }
 
        /* Bus suspended codecs as it does not manage their pm */
@@ -160,7 +160,7 @@ int hda_codec_probe_complete(struct hda_codec *codec)
        /* rpm was forbidden in snd_hda_codec_device_new() */
        snd_hda_codec_set_power_save(codec, 2000);
        snd_hda_codec_register(codec);
-out:
+
        /* Complement pm_runtime_get_sync(bus) in probe */
        pm_runtime_mark_last_busy(bus->dev);
        pm_runtime_put_autosuspend(bus->dev);