diff mbox series

ALSA: hda: release resource when snd_hdac_device_init is failed

Message ID 20200902154229.1440489-1-kai.vehmanen@linux.intel.com
State New
Headers show
Series ALSA: hda: release resource when snd_hdac_device_init is failed | expand

Commit Message

Kai Vehmanen Sept. 2, 2020, 3:42 p.m. UTC
From: Rander Wang <rander.wang@intel.com>

When snd_hdac_device_init is failed, the codec is released by kfree
immediately without releasing some resources. The vendor_name should
be free if the memory is allocated and the runtime pm status should
be restored, especially the runtime pm status of parent device.

Signed-off-by: Rander Wang <rander.wang@intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com>
Signed-off-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
---
 sound/hda/hdac_device.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)
diff mbox series

Patch

diff --git a/sound/hda/hdac_device.c b/sound/hda/hdac_device.c
index 3e9e9ac804f6..8d9d37225701 100644
--- a/sound/hda/hdac_device.c
+++ b/sound/hda/hdac_device.c
@@ -109,12 +109,16 @@  int snd_hdac_device_init(struct hdac_device *codec, struct hdac_bus *bus,
 				     codec->vendor_id & 0xffff);
 	if (!codec->chip_name) {
 		err = -ENOMEM;
-		goto error;
+		goto error_chip;
 	}
 
 	return 0;
 
+ error_chip:
+	kfree(codec->vendor_name);
  error:
+	pm_runtime_put_noidle(&codec->dev);
+	pm_runtime_set_suspended(&codec->dev);
 	put_device(&codec->dev);
 	return err;
 }