OSDN Git Service

ALSA: line6: Reduce superfluous spinlock in midi.c
authorTakashi Iwai <tiwai@suse.de>
Fri, 23 Jan 2015 11:39:11 +0000 (12:39 +0100)
committerTakashi Iwai <tiwai@suse.de>
Wed, 28 Jan 2015 06:20:34 +0000 (07:20 +0100)
The midi_transmit_lock is used always inside the send_urb_lock, thus
it doesn't play any role.  Let's kill it.  Also, rename
"send_urb_lock" as a more simple name "lock" since this is the only
lock for midi.

Tested-by: Chris Rorvick <chris@rorvick.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/line6/midi.c
sound/usb/line6/midi.h

index b5a58a7..beeedf9 100644 (file)
@@ -45,12 +45,9 @@ static void line6_midi_transmit(struct snd_rawmidi_substream *substream)
            line6_rawmidi_substream_midi(substream)->line6;
        struct snd_line6_midi *line6midi = line6->line6midi;
        struct midi_buffer *mb = &line6midi->midibuf_out;
-       unsigned long flags;
        unsigned char chunk[LINE6_FALLBACK_MAXPACKETSIZE];
        int req, done;
 
-       spin_lock_irqsave(&line6->line6midi->midi_transmit_lock, flags);
-
        for (;;) {
                req = min(line6_midibuf_bytes_free(mb), line6->max_packet_size);
                done = snd_rawmidi_transmit_peek(substream, chunk, req);
@@ -71,8 +68,6 @@ static void line6_midi_transmit(struct snd_rawmidi_substream *substream)
 
                send_midi_async(line6, chunk, done);
        }
-
-       spin_unlock_irqrestore(&line6->line6midi->midi_transmit_lock, flags);
 }
 
 /*
@@ -92,7 +87,7 @@ static void midi_sent(struct urb *urb)
        if (status == -ESHUTDOWN)
                return;
 
-       spin_lock_irqsave(&line6->line6midi->send_urb_lock, flags);
+       spin_lock_irqsave(&line6->line6midi->lock, flags);
        num = --line6->line6midi->num_active_send_urbs;
 
        if (num == 0) {
@@ -103,12 +98,12 @@ static void midi_sent(struct urb *urb)
        if (num == 0)
                wake_up(&line6->line6midi->send_wait);
 
-       spin_unlock_irqrestore(&line6->line6midi->send_urb_lock, flags);
+       spin_unlock_irqrestore(&line6->line6midi->lock, flags);
 }
 
 /*
        Send an asynchronous MIDI message.
-       Assumes that line6->line6midi->send_urb_lock is held
+       Assumes that line6->line6midi->lock is held
        (i.e., this function is serialized).
 */
 static int send_midi_async(struct usb_line6 *line6, unsigned char *data,
@@ -166,12 +161,12 @@ static void line6_midi_output_trigger(struct snd_rawmidi_substream *substream,
            line6_rawmidi_substream_midi(substream)->line6;
 
        line6->line6midi->substream_transmit = substream;
-       spin_lock_irqsave(&line6->line6midi->send_urb_lock, flags);
+       spin_lock_irqsave(&line6->line6midi->lock, flags);
 
        if (line6->line6midi->num_active_send_urbs == 0)
                line6_midi_transmit(substream);
 
-       spin_unlock_irqrestore(&line6->line6midi->send_urb_lock, flags);
+       spin_unlock_irqrestore(&line6->line6midi->lock, flags);
 }
 
 static void line6_midi_output_drain(struct snd_rawmidi_substream *substream)
@@ -281,8 +276,7 @@ int line6_init_midi(struct usb_line6 *line6)
        rmidi->private_free = snd_line6_midi_free;
 
        init_waitqueue_head(&line6midi->send_wait);
-       spin_lock_init(&line6midi->send_urb_lock);
-       spin_lock_init(&line6midi->midi_transmit_lock);
+       spin_lock_init(&line6midi->lock);
        line6midi->line6 = line6;
 
        err = line6_midibuf_init(&line6midi->midibuf_in, MIDI_BUFFER_SIZE, 0);
index ba6bf38..9d9467b 100644 (file)
@@ -40,14 +40,9 @@ struct snd_line6_midi {
        int num_active_send_urbs;
 
        /**
-                Spin lock to protect updates of send_urb.
-       */
-       spinlock_t send_urb_lock;
-
-       /**
                 Spin lock to protect MIDI buffer handling.
        */
-       spinlock_t midi_transmit_lock;
+       spinlock_t lock;
 
        /**
                 Wait queue for MIDI transmission.