mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-04 04:06:26 +00:00
ALSA: ump: Use guard() for locking
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
This commit is contained in:
parent
9301a41230
commit
631896f7ea
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user