ALSA: hda/common: Use auto cleanup for temporary buffers

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
This commit is contained in:
Takashi Iwai 2025-08-27 09:28:59 +02:00
parent 59195f13ee
commit b0550d4c2d
2 changed files with 14 additions and 23 deletions

View 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;
}

View 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,