]> www.infradead.org Git - users/hch/misc.git/commitdiff
ALSA: echoaudio: Use guard() for spin locks
authorTakashi Iwai <tiwai@suse.de>
Fri, 29 Aug 2025 14:43:00 +0000 (16:43 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 1 Sep 2025 11:52:40 +0000 (13:52 +0200)
Clean up the code using guard() for spin locks.

Merely code refactoring, and no behavior change.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20250829144342.4290-26-tiwai@suse.de
sound/pci/echoaudio/echoaudio.c
sound/pci/echoaudio/echoaudio_3g.c
sound/pci/echoaudio/gina24_dsp.c
sound/pci/echoaudio/layla24_dsp.c
sound/pci/echoaudio/midi.c
sound/pci/echoaudio/mona_dsp.c

index 4cfe8ad970698b59a38d6735163492b2222e1b7c..f2c8602a1ad7d6acecfc48e348adf1eccf2cb3c3 100644 (file)
@@ -531,22 +531,21 @@ static int init_engine(struct snd_pcm_substream *substream,
        /* Sets up che hardware. If it's already initialized, reset and
         * redo with the new parameters
         */
-       spin_lock_irq(&chip->lock);
-       if (pipe->index >= 0) {
-               dev_dbg(chip->card->dev, "hwp_ie free(%d)\n", pipe->index);
-               err = free_pipes(chip, pipe);
-               snd_BUG_ON(err);
-               chip->substream[pipe->index] = NULL;
-       }
+       scoped_guard(spinlock_irq, &chip->lock) {
+               if (pipe->index >= 0) {
+                       dev_dbg(chip->card->dev, "hwp_ie free(%d)\n", pipe->index);
+                       err = free_pipes(chip, pipe);
+                       snd_BUG_ON(err);
+                       chip->substream[pipe->index] = NULL;
+               }
 
-       err = allocate_pipes(chip, pipe, pipe_index, interleave);
-       if (err < 0) {
-               spin_unlock_irq(&chip->lock);
-               dev_err(chip->card->dev, "allocate_pipes(%d) err=%d\n",
-                       pipe_index, err);
-               return err;
+               err = allocate_pipes(chip, pipe, pipe_index, interleave);
+               if (err < 0) {
+                       dev_err(chip->card->dev, "allocate_pipes(%d) err=%d\n",
+                               pipe_index, err);
+                       return err;
+               }
        }
-       spin_unlock_irq(&chip->lock);
        dev_dbg(chip->card->dev, "allocate_pipes()=%d\n", pipe_index);
 
        dev_dbg(chip->card->dev,
@@ -594,9 +593,8 @@ static int init_engine(struct snd_pcm_substream *substream,
        smp_wmb();
        chip->substream[pipe_index] = substream;
        chip->rate_set = 1;
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
        set_sample_rate(chip, hw_params->rate_num / hw_params->rate_den);
-       spin_unlock_irq(&chip->lock);
        return 0;
 }
 
@@ -658,14 +656,13 @@ static int pcm_hw_free(struct snd_pcm_substream *substream)
        chip = snd_pcm_substream_chip(substream);
        pipe = (struct audiopipe *) substream->runtime->private_data;
 
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
        if (pipe->index >= 0) {
                dev_dbg(chip->card->dev, "pcm_hw_free(%d)\n", pipe->index);
                free_pipes(chip, pipe);
                chip->substream[pipe->index] = NULL;
                pipe->index = -1;
        }
-       spin_unlock_irq(&chip->lock);
 
        return 0;
 }
@@ -715,15 +712,12 @@ static int pcm_prepare(struct snd_pcm_substream *substream)
         * exclusive control
         */
 
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
 
-       if (snd_BUG_ON(!is_pipe_allocated(chip, pipe_index))) {
-               spin_unlock_irq(&chip->lock);
+       if (snd_BUG_ON(!is_pipe_allocated(chip, pipe_index)))
                return -EINVAL;
-       }
 
        set_audio_format(chip, pipe_index, &format);
-       spin_unlock_irq(&chip->lock);
 
        return 0;
 }
@@ -747,7 +741,7 @@ static int pcm_trigger(struct snd_pcm_substream *substream, int cmd)
                }
        }
 
-       spin_lock(&chip->lock);
+       guard(spinlock)(&chip->lock);
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_RESUME:
        case SNDRV_PCM_TRIGGER_START:
@@ -795,7 +789,6 @@ static int pcm_trigger(struct snd_pcm_substream *substream, int cmd)
        default:
                err = -EINVAL;
        }
-       spin_unlock(&chip->lock);
        return err;
 }
 
@@ -1012,7 +1005,7 @@ static int snd_echo_output_gain_put(struct snd_kcontrol *kcontrol,
 
        changed = 0;
        chip = snd_kcontrol_chip(kcontrol);
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
        for (c = 0; c < num_busses_out(chip); c++) {
                gain = ucontrol->value.integer.value[c];
                /* Ignore out of range values */
@@ -1025,7 +1018,6 @@ static int snd_echo_output_gain_put(struct snd_kcontrol *kcontrol,
        }
        if (changed)
                update_output_line_level(chip);
-       spin_unlock_irq(&chip->lock);
        return changed;
 }
 
@@ -1093,7 +1085,7 @@ static int snd_echo_input_gain_put(struct snd_kcontrol *kcontrol,
 
        changed = 0;
        chip = snd_kcontrol_chip(kcontrol);
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
        for (c = 0; c < num_analog_busses_in(chip); c++) {
                gain = ucontrol->value.integer.value[c];
                /* Ignore out of range values */
@@ -1106,7 +1098,6 @@ static int snd_echo_input_gain_put(struct snd_kcontrol *kcontrol,
        }
        if (changed)
                update_input_line_level(chip);
-       spin_unlock_irq(&chip->lock);
        return changed;
 }
 
@@ -1162,7 +1153,7 @@ static int snd_echo_output_nominal_put(struct snd_kcontrol *kcontrol,
 
        changed = 0;
        chip = snd_kcontrol_chip(kcontrol);
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
        for (c = 0; c < num_analog_busses_out(chip); c++) {
                if (chip->nominal_level[c] != ucontrol->value.integer.value[c]) {
                        set_nominal_level(chip, c,
@@ -1172,7 +1163,6 @@ static int snd_echo_output_nominal_put(struct snd_kcontrol *kcontrol,
        }
        if (changed)
                update_output_line_level(chip);
-       spin_unlock_irq(&chip->lock);
        return changed;
 }
 
@@ -1225,7 +1215,7 @@ static int snd_echo_input_nominal_put(struct snd_kcontrol *kcontrol,
 
        changed = 0;
        chip = snd_kcontrol_chip(kcontrol);
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
        for (c = 0; c < num_analog_busses_in(chip); c++) {
                if (chip->nominal_level[bx_analog_in(chip) + c] !=
                    ucontrol->value.integer.value[c]) {
@@ -1238,7 +1228,6 @@ static int snd_echo_input_nominal_put(struct snd_kcontrol *kcontrol,
                update_output_line_level(chip); /* "Output" is not a mistake
                                                 * here.
                                                 */
-       spin_unlock_irq(&chip->lock);
        return changed;
 }
 
@@ -1298,10 +1287,9 @@ static int snd_echo_mixer_put(struct snd_kcontrol *kcontrol,
        if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
                return -EINVAL;
        if (chip->monitor_gain[out][in] != gain) {
-               spin_lock_irq(&chip->lock);
+               guard(spinlock_irq)(&chip->lock);
                set_monitor_gain(chip, out, in, gain);
                update_output_line_level(chip);
-               spin_unlock_irq(&chip->lock);
                changed = 1;
        }
        return changed;
@@ -1361,10 +1349,9 @@ static int snd_echo_vmixer_put(struct snd_kcontrol *kcontrol,
        if (gain < ECHOGAIN_MINOUT || gain > ECHOGAIN_MAXOUT)
                return -EINVAL;
        if (chip->vmixer_gain[out][vch] != ucontrol->value.integer.value[0]) {
-               spin_lock_irq(&chip->lock);
+               guard(spinlock_irq)(&chip->lock);
                set_vmixer_gain(chip, out, vch, ucontrol->value.integer.value[0]);
                update_vmixer_level(chip);
-               spin_unlock_irq(&chip->lock);
                changed = 1;
        }
        return changed;
@@ -1500,9 +1487,8 @@ static int snd_echo_spdif_mode_put(struct snd_kcontrol *kcontrol,
        chip = snd_kcontrol_chip(kcontrol);
        mode = !!ucontrol->value.enumerated.item[0];
        if (mode != chip->professional_spdif) {
-               spin_lock_irq(&chip->lock);
+               guard(spinlock_irq)(&chip->lock);
                set_professional_spdif(chip, mode);
-               spin_unlock_irq(&chip->lock);
                return 1;
        }
        return 0;
@@ -1567,11 +1553,10 @@ static int snd_echo_clock_source_put(struct snd_kcontrol *kcontrol,
        dclock = chip->clock_source_list[eclock];
        if (chip->input_clock != dclock) {
                guard(mutex)(&chip->mode_mutex);
-               spin_lock_irq(&chip->lock);
+               guard(spinlock_irq)(&chip->lock);
                changed = set_input_clock(chip, dclock);
                if (!changed)
                        changed = 1;    /* no errors */
-               spin_unlock_irq(&chip->lock);
        }
 
        if (changed < 0)
@@ -1615,9 +1600,8 @@ static int snd_echo_phantom_power_put(struct snd_kcontrol *kcontrol,
 
        power = !!ucontrol->value.integer.value[0];
        if (chip->phantom_power != power) {
-               spin_lock_irq(&chip->lock);
+               guard(spinlock_irq)(&chip->lock);
                changed = set_phantom_power(chip, power);
-               spin_unlock_irq(&chip->lock);
                if (changed == 0)
                        changed = 1;    /* no errors */
        }
@@ -1658,9 +1642,8 @@ static int snd_echo_automute_put(struct snd_kcontrol *kcontrol,
 
        automute = !!ucontrol->value.integer.value[0];
        if (chip->digital_in_automute != automute) {
-               spin_lock_irq(&chip->lock);
+               guard(spinlock_irq)(&chip->lock);
                changed = set_input_auto_mute(chip, automute);
-               spin_unlock_irq(&chip->lock);
                if (changed == 0)
                        changed = 1;    /* no errors */
        }
@@ -1688,9 +1671,8 @@ static int snd_echo_vumeters_switch_put(struct snd_kcontrol *kcontrol,
        struct echoaudio *chip;
 
        chip = snd_kcontrol_chip(kcontrol);
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
        set_meters_on(chip, ucontrol->value.integer.value[0]);
-       spin_unlock_irq(&chip->lock);
        return 1;
 }
 
@@ -2135,17 +2117,13 @@ static int snd_echo_suspend(struct device *dev)
        if (chip->midi_out)
                snd_echo_midi_output_trigger(chip->midi_out, 0);
 #endif
-       spin_lock_irq(&chip->lock);
-       if (wait_handshake(chip)) {
-               spin_unlock_irq(&chip->lock);
-               return -EIO;
-       }
-       clear_handshake(chip);
-       if (send_vector(chip, DSP_VC_GO_COMATOSE) < 0) {
-               spin_unlock_irq(&chip->lock);
-               return -EIO;
+       scoped_guard(spinlock_irq, &chip->lock) {
+               if (wait_handshake(chip))
+                       return -EIO;
+               clear_handshake(chip);
+               if (send_vector(chip, DSP_VC_GO_COMATOSE) < 0)
+                       return -EIO;
        }
-       spin_unlock_irq(&chip->lock);
 
        chip->dsp_code = NULL;
        free_irq(chip->irq, chip);
index 18b4d4b4d38df04e4eb79813ade0f451c8a63c2d..c9ee98ea3c71f655283fa72f901ac541175cb97e 100644 (file)
@@ -119,7 +119,7 @@ static int set_digital_mode(struct echoaudio *chip, u8 mode)
         * updated by the DSP comm object. */
        if (err >= 0 && previous_mode != mode &&
            (previous_mode == DIGITAL_MODE_ADAT || mode == DIGITAL_MODE_ADAT)) {
-               spin_lock_irq(&chip->lock);
+               guard(spinlock_irq)(&chip->lock);
                for (o = 0; o < num_busses_out(chip); o++)
                        for (i = 0; i < num_busses_in(chip); i++)
                                set_monitor_gain(chip, o, i,
@@ -134,7 +134,6 @@ static int set_digital_mode(struct echoaudio *chip, u8 mode)
                for (o = 0; o < num_busses_out(chip); o++)
                        set_output_gain(chip, o, chip->output_gain[o]);
                update_output_line_level(chip);
-               spin_unlock_irq(&chip->lock);
        }
 
        return err;
@@ -396,7 +395,7 @@ static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode)
                return -EINVAL;
        }
 
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
 
        if (incompatible_clock) {
                chip->sample_rate = 48000;
@@ -422,7 +421,6 @@ static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode)
        }
 
        err = write_control_reg(chip, control_reg, get_frq_reg(chip), 1);
-       spin_unlock_irq(&chip->lock);
        if (err < 0)
                return err;
        chip->digital_mode = mode;
index 56e9d1b9b3309fa37280b91f76b052d8ea1f159c..78fbac9f3eac68f61d85de4cf4aed1e7b4ea4e67 100644 (file)
@@ -305,7 +305,7 @@ static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode)
                return -EINVAL;
        }
 
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
 
        if (incompatible_clock) {       /* Switch to 48KHz, internal */
                chip->sample_rate = 48000;
@@ -336,7 +336,6 @@ static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode)
        }
 
        err = write_control_reg(chip, control_reg, true);
-       spin_unlock_irq(&chip->lock);
        if (err < 0)
                return err;
        chip->digital_mode = mode;
index ef27805d63f6d1c1c11f82a7d66bbe6e7185f027..decfccb1e803d66defe55dff1ce3a615a666b2ec 100644 (file)
@@ -358,16 +358,15 @@ static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode)
 
        if (incompatible_clock) {       /* Switch to 48KHz, internal */
                chip->sample_rate = 48000;
-               spin_lock_irq(&chip->lock);
+               guard(spinlock_irq)(&chip->lock);
                set_input_clock(chip, ECHO_CLOCK_INTERNAL);
-               spin_unlock_irq(&chip->lock);
        }
 
        /* switch_asic() can sleep */
        if (switch_asic(chip, asic) < 0)
                return -EIO;
 
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
 
        /* Tweak the control register */
        control_reg = le32_to_cpu(chip->comm_page->control_register);
@@ -387,7 +386,6 @@ static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode)
        }
 
        err = write_control_reg(chip, control_reg, true);
-       spin_unlock_irq(&chip->lock);
        if (err < 0)
                return err;
        chip->digital_mode = mode;
index 4ee230794b4eedc386dcf87ef3ed68292fd67b18..dd5212644844a00eae0ba563cec2190169abab10 100644 (file)
@@ -167,9 +167,8 @@ static void snd_echo_midi_input_trigger(struct snd_rawmidi_substream *substream,
        struct echoaudio *chip = substream->rmidi->private_data;
 
        if (up != chip->midi_input_enabled) {
-               spin_lock_irq(&chip->lock);
+               guard(spinlock_irq)(&chip->lock);
                enable_midi_input(chip, up);
-               spin_unlock_irq(&chip->lock);
                chip->midi_input_enabled = up;
        }
 }
@@ -201,14 +200,13 @@ static int snd_echo_midi_output_open(struct snd_rawmidi_substream *substream)
 static void snd_echo_midi_output_write(struct timer_list *t)
 {
        struct echoaudio *chip = timer_container_of(chip, t, timer);
-       unsigned long flags;
        int bytes, sent, time;
        unsigned char buf[MIDI_OUT_BUFFER_SIZE - 1];
 
        /* No interrupts are involved: we have to check at regular intervals
        if the card's output buffer has room for new data. */
        sent = 0;
-       spin_lock_irqsave(&chip->lock, flags);
+       guard(spinlock_irqsave)(&chip->lock);
        chip->midi_full = 0;
        if (!snd_rawmidi_transmit_empty(chip->midi_out)) {
                bytes = snd_rawmidi_transmit_peek(chip->midi_out, buf,
@@ -242,7 +240,6 @@ static void snd_echo_midi_output_write(struct timer_list *t)
                dev_dbg(chip->card->dev,
                        "Timer armed(%d)\n", ((time * HZ + 999) / 1000));
        }
-       spin_unlock_irqrestore(&chip->lock, flags);
 }
 
 
@@ -251,25 +248,29 @@ static void snd_echo_midi_output_trigger(struct snd_rawmidi_substream *substream
                                         int up)
 {
        struct echoaudio *chip = substream->rmidi->private_data;
+       bool remove_timer = false;
 
        dev_dbg(chip->card->dev, "snd_echo_midi_output_trigger(%d)\n", up);
-       spin_lock_irq(&chip->lock);
-       if (up) {
-               if (!chip->tinuse) {
-                       timer_setup(&chip->timer, snd_echo_midi_output_write,
-                                   0);
-                       chip->tinuse = 1;
-               }
-       } else {
-               if (chip->tinuse) {
-                       chip->tinuse = 0;
-                       spin_unlock_irq(&chip->lock);
-                       timer_delete_sync(&chip->timer);
-                       dev_dbg(chip->card->dev, "Timer removed\n");
-                       return;
+       scoped_guard(spinlock_irq, &chip->lock) {
+               if (up) {
+                       if (!chip->tinuse) {
+                               timer_setup(&chip->timer, snd_echo_midi_output_write,
+                                           0);
+                               chip->tinuse = 1;
+                       }
+               } else {
+                       if (chip->tinuse) {
+                               chip->tinuse = 0;
+                               remove_timer = true;
+                       }
                }
        }
-       spin_unlock_irq(&chip->lock);
+
+       if (remove_timer) {
+               timer_delete_sync(&chip->timer);
+               dev_dbg(chip->card->dev, "Timer removed\n");
+               return;
+       }
 
        if (up && !chip->midi_full)
                snd_echo_midi_output_write(&chip->timer);
index f8e7bb6ce04011e7242691b1da7db3bde731aa15..9bb6a174745c07f82bd40c1cfab7f0baf5cdb9ec 100644 (file)
@@ -381,7 +381,7 @@ static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode)
                return -EINVAL;
        }
 
-       spin_lock_irq(&chip->lock);
+       guard(spinlock_irq)(&chip->lock);
 
        if (incompatible_clock) {       /* Switch to 48KHz, internal */
                chip->sample_rate = 48000;
@@ -413,7 +413,6 @@ static int dsp_set_digital_mode(struct echoaudio *chip, u8 mode)
        }
 
        err = write_control_reg(chip, control_reg, false);
-       spin_unlock_irq(&chip->lock);
        if (err < 0)
                return err;
        chip->digital_mode = mode;