From: Mark Brown <broonie@kernel.org>
To: "Dharageswari.R" <dharageswari.r@intel.com>,
Vinod Koul <vinod.koul@intel.com>,
Mark Brown <broonie@kernel.org>
Cc: alsa-devel@alsa-project.org
Subject: Applied "ASoC: Intel: Skylake: Fix pipe memory allocation leak" to the asoc tree
Date: Thu, 04 Feb 2016 12:16:15 +0000 [thread overview]
Message-ID: <E1aRIpb-0001EA-Cn@debutante> (raw)
In-Reply-To: <1454502594-21700-5-git-send-email-vinod.koul@intel.com>
The patch
ASoC: Intel: Skylake: Fix pipe memory allocation leak
has been applied to the asoc tree at
git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git
All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.
You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.
If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.
Please add any relevant lists and maintainers to the CCs when replying
to this mail.
Thanks,
Mark
>From 9ba8ffef9635c11102bc42d0f2d0a4213de273d5 Mon Sep 17 00:00:00 2001
From: "Dharageswari.R" <dharageswari.r@intel.com>
Date: Wed, 3 Feb 2016 17:59:47 +0530
Subject: [PATCH] ASoC: Intel: Skylake: Fix pipe memory allocation leak
We check and allocate pipeline resources in one shot. That causes
leaks if module creation fails later as that is not freed.
So split the resource allocation into two, first check if
resources are available and then add the resources upon
successful creation. So two new functions are added for checking
and current functions are re-purposed to only add the resources
for memory and MCPS.
Signed-off-by: Dharageswari.R <dharageswari.r@intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
---
sound/soc/intel/skylake/skl-topology.c | 42 +++++++++++++++++++++++-----------
1 file changed, 29 insertions(+), 13 deletions(-)
diff --git a/sound/soc/intel/skylake/skl-topology.c b/sound/soc/intel/skylake/skl-topology.c
index 86d5323e9184..efe001162204 100644
--- a/sound/soc/intel/skylake/skl-topology.c
+++ b/sound/soc/intel/skylake/skl-topology.c
@@ -54,12 +54,9 @@ static int is_skl_dsp_widget_type(struct snd_soc_dapm_widget *w)
/*
* Each pipelines needs memory to be allocated. Check if we have free memory
- * from available pool. Then only add this to pool
- * This is freed when pipe is deleted
- * Note: DSP does actual memory management we only keep track for complete
- * pool
+ * from available pool.
*/
-static bool skl_tplg_alloc_pipe_mem(struct skl *skl,
+static bool skl_is_pipe_mem_avail(struct skl *skl,
struct skl_module_cfg *mconfig)
{
struct skl_sst *ctx = skl->skl_sst;
@@ -74,10 +71,20 @@ static bool skl_tplg_alloc_pipe_mem(struct skl *skl,
"exceeds ppl memory available %d mem %d\n",
skl->resource.max_mem, skl->resource.mem);
return false;
+ } else {
+ return true;
}
+}
+/*
+ * Add the mem to the mem pool. This is freed when pipe is deleted.
+ * Note: DSP does actual memory management we only keep track for complete
+ * pool
+ */
+static void skl_tplg_alloc_pipe_mem(struct skl *skl,
+ struct skl_module_cfg *mconfig)
+{
skl->resource.mem += mconfig->pipe->memory_pages;
- return true;
}
/*
@@ -85,10 +92,10 @@ static bool skl_tplg_alloc_pipe_mem(struct skl *skl,
* quantified in MCPS (Million Clocks Per Second) required for module/pipe
*
* Each pipelines needs mcps to be allocated. Check if we have mcps for this
- * pipe. This adds the mcps to driver counter
- * This is removed on pipeline delete
+ * pipe.
*/
-static bool skl_tplg_alloc_pipe_mcps(struct skl *skl,
+
+static bool skl_is_pipe_mcps_avail(struct skl *skl,
struct skl_module_cfg *mconfig)
{
struct skl_sst *ctx = skl->skl_sst;
@@ -101,10 +108,15 @@ static bool skl_tplg_alloc_pipe_mcps(struct skl *skl,
"exceeds ppl mcps available %d > mem %d\n",
skl->resource.max_mcps, skl->resource.mcps);
return false;
+ } else {
+ return true;
}
+}
+static void skl_tplg_alloc_pipe_mcps(struct skl *skl,
+ struct skl_module_cfg *mconfig)
+{
skl->resource.mcps += mconfig->mcps;
- return true;
}
/*
@@ -411,7 +423,7 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe)
mconfig = w->priv;
/* check resource available */
- if (!skl_tplg_alloc_pipe_mcps(skl, mconfig))
+ if (!skl_is_pipe_mcps_avail(skl, mconfig))
return -ENOMEM;
if (mconfig->is_loadable && ctx->dsp->fw_ops.load_mod) {
@@ -435,6 +447,7 @@ skl_tplg_init_pipe_modules(struct skl *skl, struct skl_pipe *pipe)
ret = skl_tplg_set_module_params(w, ctx);
if (ret < 0)
return ret;
+ skl_tplg_alloc_pipe_mcps(skl, mconfig);
}
return 0;
@@ -477,10 +490,10 @@ static int skl_tplg_mixer_dapm_pre_pmu_event(struct snd_soc_dapm_widget *w,
struct skl_sst *ctx = skl->skl_sst;
/* check resource available */
- if (!skl_tplg_alloc_pipe_mcps(skl, mconfig))
+ if (!skl_is_pipe_mcps_avail(skl, mconfig))
return -EBUSY;
- if (!skl_tplg_alloc_pipe_mem(skl, mconfig))
+ if (!skl_is_pipe_mem_avail(skl, mconfig))
return -ENOMEM;
/*
@@ -526,6 +539,9 @@ static int skl_tplg_mixer_dapm_pre_pmu_event(struct snd_soc_dapm_widget *w,
src_module = dst_module;
}
+ skl_tplg_alloc_pipe_mem(skl, mconfig);
+ skl_tplg_alloc_pipe_mcps(skl, mconfig);
+
return 0;
}
--
2.7.0.rc3
next prev parent reply other threads:[~2016-02-04 12:16 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-02-03 12:29 [PATCH 00/11] ASoC: Intel: Skylake: Driver fixes Vinod Koul
2016-02-03 12:29 ` [PATCH 01/11] ASoC: Intel: Skylake: Fix the memory overwrite of tlv buffer Vinod Koul
2016-02-04 12:16 ` Applied "ASoC: Intel: Skylake: Fix the memory overwrite of tlv buffer" to the asoc tree Mark Brown
2016-02-03 12:29 ` [PATCH 02/11] ASoC: Intel: Skylake: Fix delay wrap condition Vinod Koul
2016-02-04 11:24 ` Mark Brown
2016-02-04 15:03 ` Vinod Koul
2016-02-04 12:16 ` Applied "ASoC: Intel: Skylake: Fix delay wrap condition" to the asoc tree Mark Brown
2016-02-03 12:29 ` [PATCH 03/11] ASoC: Intel: Skylake: Fix mcps freeup after module unbind failure Vinod Koul
2016-02-04 12:16 ` Applied "ASoC: Intel: Skylake: Fix mcps freeup after module unbind failure" to the asoc tree Mark Brown
2016-02-03 12:29 ` [PATCH 04/11] ASoC: Intel: Skylake: Fix pipe memory allocation leak Vinod Koul
2016-02-04 12:16 ` Mark Brown [this message]
2016-02-03 12:29 ` [PATCH 05/11] ASoC: Intel: Skylake: Fix return of skl_get_queue_index Vinod Koul
2016-02-04 12:16 ` Applied "ASoC: Intel: Skylake: Fix return of skl_get_queue_index" to the asoc tree Mark Brown
2016-02-03 12:29 ` [PATCH 06/11] ASoC: Intel: Skylake: Fix the module state check condition Vinod Koul
2016-02-04 12:16 ` Applied "ASoC: Intel: Skylake: Fix the module state check condition" to the asoc tree Mark Brown
2016-02-03 12:29 ` [PATCH 07/11] ASoC: Intel: Skylake: Fix not to stop sink pipe in pga pmd event Vinod Koul
2016-02-04 12:16 ` Applied "ASoC: Intel: Skylake: Fix not to stop sink pipe in pga pmd event" to the asoc tree Mark Brown
2016-02-03 12:29 ` [PATCH 08/11] ASoC: Intel: Skylake: Fix bind of source with multiple sinks Vinod Koul
2016-02-04 12:16 ` Applied "ASoC: Intel: Skylake: Fix bind of source with multiple sinks" to the asoc tree Mark Brown
2016-02-03 12:29 ` [PATCH 09/11] ASoC: Intel: Skylake: Add missing PRE/POST_PMU handlers for vmixer Vinod Koul
2016-02-04 12:16 ` Applied "ASoC: Intel: Skylake: Add missing PRE/POST_PMU handlers for vmixer" to the asoc tree Mark Brown
2016-02-03 12:29 ` [PATCH 10/11] ASoC: Intel: Skylake: Fix stereo DMIC record Vinod Koul
2016-02-04 12:16 ` Applied "ASoC: Intel: Skylake: Fix stereo DMIC record" to the asoc tree Mark Brown
2016-02-03 12:29 ` [PATCH 11/11] ASoC: Intel: Skylake: Remove autosuspend delay Vinod Koul
2016-02-04 12:16 ` Applied "ASoC: Intel: Skylake: Remove autosuspend delay" to the asoc tree Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=E1aRIpb-0001EA-Cn@debutante \
--to=broonie@kernel.org \
--cc=alsa-devel@alsa-project.org \
--cc=dharageswari.r@intel.com \
--cc=vinod.koul@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox