If you temporarily find the circumstances too challenging for applications of scope-based resource management, I suggest to use the following statements instead (so that a bit of redundant code can be avoided). … > +++ b/drivers/accel/amdxdna/aie2_pci.c > @@ -0,0 +1,182 @@ … > +static int aie2_init(struct amdxdna_dev *xdna) > +{ … > + release_firmware(fw); > + return 0; ret = 0; goto release_fw; … > +release_fw: > + release_firmware(fw); > + > + return ret; > +} … Otherwise (in case further collateral evolution will become more desirable): … > +static int aie2_init(struct amdxdna_dev *xdna) > +{ … > + const struct firmware *fw; I propose to take another software design option better into account. * You may reduce the scope of such a local variable. * How do you think about to use the attribute “__free(firmware)”? https://elixir.bootlin.com/linux/v6.11-rc2/source/include/linux/firmware.h#L214 … > + ret = request_firmware(&fw, ndev->priv->fw_path, &pdev->dev); … Regards, Markus