mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git
synced 2025-01-16 13:34:30 +00:00
ALSA: seq: midi: 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-18-tiwai@suse.de
This commit is contained in:
parent
aa75a22292
commit
45bab301d8
@ -302,22 +302,19 @@ snd_seq_midisynth_probe(struct device *_dev)
|
||||
if (ports > (256 / SNDRV_RAWMIDI_DEVICES))
|
||||
ports = 256 / SNDRV_RAWMIDI_DEVICES;
|
||||
|
||||
mutex_lock(®ister_mutex);
|
||||
guard(mutex)(®ister_mutex);
|
||||
client = synths[card->number];
|
||||
if (client == NULL) {
|
||||
newclient = 1;
|
||||
client = kzalloc(sizeof(*client), GFP_KERNEL);
|
||||
if (client == NULL) {
|
||||
mutex_unlock(®ister_mutex);
|
||||
if (client == NULL)
|
||||
return -ENOMEM;
|
||||
}
|
||||
client->seq_client =
|
||||
snd_seq_create_kernel_client(
|
||||
card, 0, "%s", card->shortname[0] ?
|
||||
(const char *)card->shortname : "External MIDI");
|
||||
if (client->seq_client < 0) {
|
||||
kfree(client);
|
||||
mutex_unlock(®ister_mutex);
|
||||
return -ENOMEM;
|
||||
}
|
||||
}
|
||||
@ -398,7 +395,6 @@ snd_seq_midisynth_probe(struct device *_dev)
|
||||
client->num_ports++;
|
||||
if (newclient)
|
||||
synths[card->number] = client;
|
||||
mutex_unlock(®ister_mutex);
|
||||
return 0; /* success */
|
||||
|
||||
__nomem:
|
||||
@ -411,7 +407,6 @@ snd_seq_midisynth_probe(struct device *_dev)
|
||||
snd_seq_delete_kernel_client(client->seq_client);
|
||||
kfree(client);
|
||||
}
|
||||
mutex_unlock(®ister_mutex);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
@ -425,12 +420,10 @@ snd_seq_midisynth_remove(struct device *_dev)
|
||||
struct snd_card *card = dev->card;
|
||||
int device = dev->device, p, ports;
|
||||
|
||||
mutex_lock(®ister_mutex);
|
||||
guard(mutex)(®ister_mutex);
|
||||
client = synths[card->number];
|
||||
if (client == NULL || client->ports[device] == NULL) {
|
||||
mutex_unlock(®ister_mutex);
|
||||
if (client == NULL || client->ports[device] == NULL)
|
||||
return -ENODEV;
|
||||
}
|
||||
ports = client->ports_per_device[device];
|
||||
client->ports_per_device[device] = 0;
|
||||
msynth = client->ports[device];
|
||||
@ -444,7 +437,6 @@ snd_seq_midisynth_remove(struct device *_dev)
|
||||
synths[card->number] = NULL;
|
||||
kfree(client);
|
||||
}
|
||||
mutex_unlock(®ister_mutex);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -144,21 +144,15 @@ static inline void reset_encode(struct snd_midi_event *dev)
|
||||
|
||||
void snd_midi_event_reset_encode(struct snd_midi_event *dev)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&dev->lock, flags);
|
||||
guard(spinlock_irqsave)(&dev->lock);
|
||||
reset_encode(dev);
|
||||
spin_unlock_irqrestore(&dev->lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(snd_midi_event_reset_encode);
|
||||
|
||||
void snd_midi_event_reset_decode(struct snd_midi_event *dev)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock_irqsave(&dev->lock, flags);
|
||||
guard(spinlock_irqsave)(&dev->lock);
|
||||
dev->lastcmd = 0xff;
|
||||
spin_unlock_irqrestore(&dev->lock, flags);
|
||||
}
|
||||
EXPORT_SYMBOL(snd_midi_event_reset_decode);
|
||||
|
||||
@ -177,7 +171,6 @@ bool snd_midi_event_encode_byte(struct snd_midi_event *dev, unsigned char c,
|
||||
struct snd_seq_event *ev)
|
||||
{
|
||||
bool rc = false;
|
||||
unsigned long flags;
|
||||
|
||||
if (c >= MIDI_CMD_COMMON_CLOCK) {
|
||||
/* real-time event */
|
||||
@ -187,7 +180,7 @@ bool snd_midi_event_encode_byte(struct snd_midi_event *dev, unsigned char c,
|
||||
return ev->type != SNDRV_SEQ_EVENT_NONE;
|
||||
}
|
||||
|
||||
spin_lock_irqsave(&dev->lock, flags);
|
||||
guard(spinlock_irqsave)(&dev->lock);
|
||||
if ((c & 0x80) &&
|
||||
(c != MIDI_CMD_COMMON_SYSEX_END || dev->type != ST_SYSEX)) {
|
||||
/* new command */
|
||||
@ -236,7 +229,6 @@ bool snd_midi_event_encode_byte(struct snd_midi_event *dev, unsigned char c,
|
||||
}
|
||||
}
|
||||
|
||||
spin_unlock_irqrestore(&dev->lock, flags);
|
||||
return rc;
|
||||
}
|
||||
EXPORT_SYMBOL(snd_midi_event_encode_byte);
|
||||
|
Loading…
x
Reference in New Issue
Block a user