ALSA: usb-audio: Unify audioformat release code
authorTakashi Iwai <tiwai@suse.de>
Sat, 27 Jul 2019 08:55:49 +0000 (10:55 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 6 Aug 2019 10:47:52 +0000 (12:47 +0200)
There are many open code for releasing audioformat object.
Provide a unified helper and call it from the all places.

Only a cleanup, no functional changes.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/stream.c

index e852c7fd61097e566215fd87f8a298351057de04..963d425004f8a74ead59684e1e1b932907f2def1 100644 (file)
 #include "power.h"
 #include "media.h"
 
+static void audioformat_free(struct audioformat *fp)
+{
+       list_del(&fp->list); /* unlink for avoiding double-free */
+       kfree(fp->rate_table);
+       kfree(fp->chmap);
+       kfree(fp);
+}
+
 /*
  * free a substream
  */
@@ -37,11 +45,8 @@ static void free_substream(struct snd_usb_substream *subs)
 
        if (!subs->num_formats)
                return; /* not initialized */
-       list_for_each_entry_safe(fp, n, &subs->fmt_list, list) {
-               kfree(fp->rate_table);
-               kfree(fp->chmap);
-               kfree(fp);
-       }
+       list_for_each_entry_safe(fp, n, &subs->fmt_list, list)
+               audioformat_free(fp);
        kfree(subs->rate_list.list);
        kfree(subs->str_pd);
        snd_media_stream_delete(subs);
@@ -832,8 +837,7 @@ found_clock:
        /* ok, let's parse further... */
        if (snd_usb_parse_audio_format(chip, fp, format,
                                        fmt, stream) < 0) {
-               kfree(fp->rate_table);
-               kfree(fp);
+               audioformat_free(fp);
                return NULL;
        }
 
@@ -1043,9 +1047,7 @@ found_clock:
 
                pd = kzalloc(sizeof(*pd), GFP_KERNEL);
                if (!pd) {
-                       kfree(fp->chmap);
-                       kfree(fp->rate_table);
-                       kfree(fp);
+                       audioformat_free(fp);
                        return NULL;
                }
                pd->pd_id = (stream == SNDRV_PCM_STREAM_PLAYBACK) ?
@@ -1064,9 +1066,7 @@ found_clock:
                /* ok, let's parse further... */
                if (snd_usb_parse_audio_format_v3(chip, fp, as, stream) < 0) {
                        kfree(pd);
-                       kfree(fp->chmap);
-                       kfree(fp->rate_table);
-                       kfree(fp);
+                       audioformat_free(fp);
                        return NULL;
                }
        }
@@ -1185,11 +1185,8 @@ int snd_usb_parse_audio_interface(struct snd_usb_audio *chip, int iface_no)
                        err = snd_usb_add_audio_stream(chip, stream, fp);
 
                if (err < 0) {
-                       list_del(&fp->list); /* unlink for avoiding double-free */
+                       audioformat_free(fp);
                        kfree(pd);
-                       kfree(fp->rate_table);
-                       kfree(fp->chmap);
-                       kfree(fp);
                        return err;
                }
                /* try to set the interface... */