Commit f77d443c authored by Subhransu S. Prusty's avatar Subhransu S. Prusty Committed by Mark Brown
Browse files

ASoC: Intel: Skylake: Fix to free resources for dsp_init failure



unmap mmio and free memory resources if dsp_init fails.

Signed-off-by: default avatarSubhransu S. Prusty <subhransu.s.prusty@intel.com>
Acked-By: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 3b3011ad
Loading
Loading
Loading
Loading
+19 −7
Original line number Diff line number Diff line
@@ -277,8 +277,10 @@ int skl_init_dsp(struct skl *skl)
	}

	ops = skl_get_dsp_ops(skl->pci->device);
	if (!ops)
		return -EIO;
	if (!ops) {
		goto unmap_mmio;
		ret = -EIO;
	}

	loader_ops = ops->loader_ops();
	ret = ops->init(bus->dev, mmio_base, irq,
@@ -286,25 +288,35 @@ int skl_init_dsp(struct skl *skl)
				&skl->skl_sst);

	if (ret < 0)
		return ret;
		goto unmap_mmio;

	skl->skl_sst->dsp_ops = ops;
	cores = &skl->skl_sst->cores;
	cores->count = ops->num_cores;

	cores->state = kcalloc(cores->count, sizeof(*cores->state), GFP_KERNEL);
	if (!cores->state)
		return -ENOMEM;
	if (!cores->state) {
		ret = -ENOMEM;
		goto unmap_mmio;
	}

	cores->usage_count = kcalloc(cores->count, sizeof(*cores->usage_count),
				     GFP_KERNEL);
	if (!cores->usage_count) {
		kfree(cores->state);
		return -ENOMEM;
		ret = -ENOMEM;
		goto free_core_state;
	}

	dev_dbg(bus->dev, "dsp registration status=%d\n", ret);

	return 0;

free_core_state:
	kfree(cores->state);

unmap_mmio:
	iounmap(mmio_base);

	return ret;
}