On Wed, 02 Sep 2020 17:42:29 +0200, Kai Vehmanen wrote: > > From: Rander Wang <rander.wang@xxxxxxxxx> > > 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. It's released via put_device() and this should call the release callback, default_release(), and it contains all those kfree()'s and pm_runtime_*(). Could you double-check whether it's really missing? thanks, Takashi > > Signed-off-by: Rander Wang <rander.wang@xxxxxxxxx> > Reviewed-by: Ranjani Sridharan <ranjani.sridharan@xxxxxxxxxxxxxxx> > Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@xxxxxxxxxxxxxxx> > Reviewed-by: Bard Liao <yung-chuan.liao@xxxxxxxxxxxxxxx> > Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@xxxxxxxxxxxxxxx> > Signed-off-by: Kai Vehmanen <kai.vehmanen@xxxxxxxxxxxxxxx> > --- > sound/hda/hdac_device.c | 6 +++++- > 1 file changed, 5 insertions(+), 1 deletion(-) > > 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; > } > -- > 2.27.0 >