ALSA: ump: Use guard() for locking
authorTakashi Iwai <tiwai@suse.de>
Tue, 27 Feb 2024 08:52:43 +0000 (09:52 +0100)
committerTakashi Iwai <tiwai@suse.de>
Wed, 28 Feb 2024 14:01:20 +0000 (15:01 +0100)
We can simplify the code gracefully with new guard() macro and co for
automatic cleanup of locks.

Only the code refactoring, and no functional changes.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://lore.kernel.org/r/20240227085306.9764-2-tiwai@suse.de
sound/core/ump.c

index fe7911498cc4325a866a87328087c54a0a6c791a..fd6a68a5427886d11e443132a74568d933f2f163 100644 (file)
@@ -985,13 +985,11 @@ static int snd_ump_legacy_open(struct snd_rawmidi_substream *substream)
        struct snd_ump_endpoint *ump = substream->rmidi->private_data;
        int dir = substream->stream;
        int group = ump->legacy_mapping[substream->number];
-       int err = 0;
+       int err;
 
-       mutex_lock(&ump->open_mutex);
-       if (ump->legacy_substreams[dir][group]) {
-               err = -EBUSY;
-               goto unlock;
-       }
+       guard(mutex)(&ump->open_mutex);
+       if (ump->legacy_substreams[dir][group])
+               return -EBUSY;
        if (dir == SNDRV_RAWMIDI_STREAM_OUTPUT) {
                if (!ump->legacy_out_opens) {
                        err = snd_rawmidi_kernel_open(&ump->core, 0,
@@ -999,17 +997,14 @@ static int snd_ump_legacy_open(struct snd_rawmidi_substream *substream)
                                                      SNDRV_RAWMIDI_LFLG_APPEND,
                                                      &ump->legacy_out_rfile);
                        if (err < 0)
-                               goto unlock;
+                               return err;
                }
                ump->legacy_out_opens++;
                snd_ump_convert_reset(&ump->out_cvts[group]);
        }
-       spin_lock_irq(&ump->legacy_locks[dir]);
+       guard(spinlock_irq)(&ump->legacy_locks[dir]);
        ump->legacy_substreams[dir][group] = substream;
-       spin_unlock_irq(&ump->legacy_locks[dir]);
- unlock:
-       mutex_unlock(&ump->open_mutex);
-       return err;
+       return 0;
 }
 
 static int snd_ump_legacy_close(struct snd_rawmidi_substream *substream)
@@ -1018,15 +1013,13 @@ static int snd_ump_legacy_close(struct snd_rawmidi_substream *substream)
        int dir = substream->stream;
        int group = ump->legacy_mapping[substream->number];
 
-       mutex_lock(&ump->open_mutex);
-       spin_lock_irq(&ump->legacy_locks[dir]);
-       ump->legacy_substreams[dir][group] = NULL;
-       spin_unlock_irq(&ump->legacy_locks[dir]);
+       guard(mutex)(&ump->open_mutex);
+       scoped_guard(spinlock_irq, &ump->legacy_locks[dir])
+               ump->legacy_substreams[dir][group] = NULL;
        if (dir == SNDRV_RAWMIDI_STREAM_OUTPUT) {
                if (!--ump->legacy_out_opens)
                        snd_rawmidi_kernel_release(&ump->legacy_out_rfile);
        }
-       mutex_unlock(&ump->open_mutex);
        return 0;
 }
 
@@ -1078,12 +1071,11 @@ static int process_legacy_output(struct snd_ump_endpoint *ump,
        const int dir = SNDRV_RAWMIDI_STREAM_OUTPUT;
        unsigned char c;
        int group, size = 0;
-       unsigned long flags;
 
        if (!ump->out_cvts || !ump->legacy_out_opens)
                return 0;
 
-       spin_lock_irqsave(&ump->legacy_locks[dir], flags);
+       guard(spinlock_irqsave)(&ump->legacy_locks[dir]);
        for (group = 0; group < SNDRV_UMP_MAX_GROUPS; group++) {
                substream = ump->legacy_substreams[dir][group];
                if (!substream)
@@ -1099,7 +1091,6 @@ static int process_legacy_output(struct snd_ump_endpoint *ump,
                        break;
                }
        }
-       spin_unlock_irqrestore(&ump->legacy_locks[dir], flags);
        return size;
 }
 
@@ -1109,18 +1100,16 @@ static void process_legacy_input(struct snd_ump_endpoint *ump, const u32 *src,
        struct snd_rawmidi_substream *substream;
        unsigned char buf[16];
        unsigned char group;
-       unsigned long flags;
        const int dir = SNDRV_RAWMIDI_STREAM_INPUT;
        int size;
 
        size = snd_ump_convert_from_ump(src, buf, &group);
        if (size <= 0)
                return;
-       spin_lock_irqsave(&ump->legacy_locks[dir], flags);
+       guard(spinlock_irqsave)(&ump->legacy_locks[dir]);
        substream = ump->legacy_substreams[dir][group];
        if (substream)
                snd_rawmidi_receive(substream, buf, size);
-       spin_unlock_irqrestore(&ump->legacy_locks[dir], flags);
 }
 
 /* Fill ump->legacy_mapping[] for groups to be used for legacy rawmidi */