ASoC: wm_adsp: Move temporary control name to the stack
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Mon, 13 Apr 2015 12:27:57 +0000 (13:27 +0100)
committerMark Brown <broonie@kernel.org>
Mon, 27 Apr 2015 14:38:24 +0000 (15:38 +0100)
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 <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/wm_adsp.c

index c291203..6c4f013 100644 (file)
@@ -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;
 }