From: Charles Keepax Date: Mon, 13 Apr 2015 12:27:57 +0000 (+0100) Subject: ASoC: wm_adsp: Move temporary control name to the stack X-Git-Url: http://git.cdn.openwrt.org/?a=commitdiff_plain;h=512f2bbaf63f2623ff43c528f0b4281cde3691ed;p=openwrt%2Fstaging%2Fblogic.git ASoC: wm_adsp: Move temporary control name to the stack Now we only allocate 44 bytes for the control name keep it on the stack to avoid a lot of pointless memory allocation. Signed-off-by: Charles Keepax Signed-off-by: Mark Brown --- diff --git a/sound/soc/codecs/wm_adsp.c b/sound/soc/codecs/wm_adsp.c index c2912033e3e3..6c4f013be8b5 100644 --- a/sound/soc/codecs/wm_adsp.c +++ b/sound/soc/codecs/wm_adsp.c @@ -785,14 +785,10 @@ static int wm_adsp_create_control(struct wm_adsp *dsp, { struct wm_coeff_ctl *ctl; struct wmfw_ctl_work *ctl_work; - char *name; + char name[SNDRV_CTL_ELEM_ID_NAME_MAXLEN]; char *region_name; int ret; - name = kmalloc(SNDRV_CTL_ELEM_ID_NAME_MAXLEN, GFP_KERNEL); - if (!name) - return -ENOMEM; - switch (alg_region->type) { case WMFW_ADSP1_PM: region_name = "PM"; @@ -810,8 +806,7 @@ static int wm_adsp_create_control(struct wm_adsp *dsp, region_name = "ZM"; break; default: - ret = -EINVAL; - goto err_name; + return -EINVAL; } snprintf(name, SNDRV_CTL_ELEM_ID_NAME_MAXLEN, "DSP%d %s %x", @@ -822,15 +817,13 @@ static int wm_adsp_create_control(struct wm_adsp *dsp, if (!strcmp(ctl->name, name)) { if (!ctl->enabled) ctl->enabled = 1; - goto found; + return 0; } } ctl = kzalloc(sizeof(*ctl), GFP_KERNEL); - if (!ctl) { - ret = -ENOMEM; - goto err_name; - } + if (!ctl) + return -ENOMEM; ctl->alg_region = *alg_region; ctl->name = kmemdup(name, strlen(name) + 1, GFP_KERNEL); if (!ctl->name) { @@ -866,9 +859,6 @@ static int wm_adsp_create_control(struct wm_adsp *dsp, INIT_WORK(&ctl_work->work, wm_adsp_ctl_work); schedule_work(&ctl_work->work); -found: - kfree(name); - return 0; err_ctl_cache: @@ -877,8 +867,7 @@ err_ctl_name: kfree(ctl->name); err_ctl: kfree(ctl); -err_name: - kfree(name); + return ret; }