]> www.infradead.org Git - users/hch/misc.git/commitdiff
ALSA: hda/common: Use auto cleanup for temporary buffers
authorTakashi Iwai <tiwai@suse.de>
Wed, 27 Aug 2025 07:28:59 +0000 (09:28 +0200)
committerTakashi Iwai <tiwai@suse.de>
Fri, 29 Aug 2025 09:52:15 +0000 (11:52 +0200)
The release of temporary kmalloced buffers can be nicely handled via
the standard __free(kfree).

Only code refactoring, and no behavior change.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20250827072916.31933-20-tiwai@suse.de
sound/hda/common/codec.c
sound/hda/common/sysfs.c

index 022086f8d4df606c265f5986c5aa2f980c245f57..f6c9230f04ccd51ffe8158026faea715a8f45b0d 100644 (file)
@@ -1858,14 +1858,14 @@ static int check_follower_present(struct hda_codec *codec,
 /* call kctl->put with the given value(s) */
 static int put_kctl_with_value(struct snd_kcontrol *kctl, int val)
 {
-       struct snd_ctl_elem_value *ucontrol;
+       struct snd_ctl_elem_value *ucontrol __free(kfree) = NULL;
+
        ucontrol = kzalloc(sizeof(*ucontrol), GFP_KERNEL);
        if (!ucontrol)
                return -ENOMEM;
        ucontrol->value.integer.value[0] = val;
        ucontrol->value.integer.value[1] = val;
        kctl->put(kctl, ucontrol);
-       kfree(ucontrol);
        return 0;
 }
 
index 555c16ea60a5ba0c51b9786e3471b3e380b807ef..f8c8483fd5e5f3f1b04743d742dbc37a1dd2f06e 100644 (file)
@@ -299,9 +299,9 @@ static void remove_trail_spaces(char *str)
 
 static int parse_hints(struct hda_codec *codec, const char *buf)
 {
-       char *key, *val;
+       char *key __free(kfree) = NULL;
+       char *val;
        struct hda_hint *hint;
-       int err = 0;
 
        buf = skip_spaces(buf);
        if (!*buf || *buf == '#' || *buf == '\n')
@@ -313,10 +313,8 @@ static int parse_hints(struct hda_codec *codec, const char *buf)
                return -ENOMEM;
        /* extract key and val */
        val = strchr(key, '=');
-       if (!val) {
-               kfree(key);
+       if (!val)
                return -EINVAL;
-       }
        *val++ = 0;
        val = skip_spaces(val);
        remove_trail_spaces(key);
@@ -326,25 +324,18 @@ static int parse_hints(struct hda_codec *codec, const char *buf)
        if (hint) {
                /* replace */
                kfree(hint->key);
-               hint->key = key;
-               hint->val = val;
-               goto unlock;
+               goto replace;
        }
        /* allocate a new hint entry */
        if (codec->hints.used >= MAX_HINTS)
-               hint = NULL;
-       else
-               hint = snd_array_new(&codec->hints);
-       if (hint) {
-               hint->key = key;
-               hint->val = val;
-       } else {
-               err = -ENOMEM;
-       }
- unlock:
-       if (err)
-               kfree(key);
-       return err;
+               return -ENOMEM;
+       hint = snd_array_new(&codec->hints);
+       if (!hint)
+               return -ENOMEM;
+ replace:
+       hint->key = no_free_ptr(key);
+       hint->val = val;
+       return 0;
 }
 
 static ssize_t hints_store(struct device *dev,