Commit 99e09b9c authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Vinod Koul
Browse files

soundwire: qcom: add proper error paths in qcom_swrm_startup()



Reverse actions in qcom_swrm_startup() error paths to avoid leaking
stream memory and keeping runtime PM unbalanced.

Signed-off-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20230517163736.997553-1-krzysztof.kozlowski@linaro.org


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
parent 700581ed
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -1099,8 +1099,10 @@ static int qcom_swrm_startup(struct snd_pcm_substream *substream,
	}

	sruntime = sdw_alloc_stream(dai->name);
	if (!sruntime)
		return -ENOMEM;
	if (!sruntime) {
		ret = -ENOMEM;
		goto err_alloc;
	}

	ctrl->sruntime[dai->id] = sruntime;

@@ -1110,12 +1112,19 @@ static int qcom_swrm_startup(struct snd_pcm_substream *substream,
		if (ret < 0 && ret != -ENOTSUPP) {
			dev_err(dai->dev, "Failed to set sdw stream on %s\n",
				codec_dai->name);
			sdw_release_stream(sruntime);
			return ret;
			goto err_set_stream;
		}
	}

	return 0;

err_set_stream:
	sdw_release_stream(sruntime);
err_alloc:
	pm_runtime_mark_last_busy(ctrl->dev);
	pm_runtime_put_autosuspend(ctrl->dev);

	return ret;
}

static void qcom_swrm_shutdown(struct snd_pcm_substream *substream,