diff options
author | Takashi Iwai <tiwai@suse.de> | 2015-01-23 06:39:11 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2015-01-28 01:20:34 -0500 |
commit | bc518ba4ccb487ef52e418c3ff68050cf07b3bc0 (patch) | |
tree | 9d7e78126f2e8a4a1332d7df0c6975892cf9632e /sound/usb/line6 | |
parent | b55004f9fdee80de1b6982b3e99ebaeb7d1e7a6c (diff) |
ALSA: line6: Reduce superfluous spinlock in midi.c
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>
Diffstat (limited to 'sound/usb/line6')
-rw-r--r-- | sound/usb/line6/midi.c | 18 | ||||
-rw-r--r-- | sound/usb/line6/midi.h | 7 |
2 files changed, 7 insertions, 18 deletions
diff --git a/sound/usb/line6/midi.c b/sound/usb/line6/midi.c index b5a58a7fe11a..beeedf9a2cbe 100644 --- a/sound/usb/line6/midi.c +++ b/sound/usb/line6/midi.c | |||
@@ -45,12 +45,9 @@ static void line6_midi_transmit(struct snd_rawmidi_substream *substream) | |||
45 | line6_rawmidi_substream_midi(substream)->line6; | 45 | line6_rawmidi_substream_midi(substream)->line6; |
46 | struct snd_line6_midi *line6midi = line6->line6midi; | 46 | struct snd_line6_midi *line6midi = line6->line6midi; |
47 | struct midi_buffer *mb = &line6midi->midibuf_out; | 47 | struct midi_buffer *mb = &line6midi->midibuf_out; |
48 | unsigned long flags; | ||
49 | unsigned char chunk[LINE6_FALLBACK_MAXPACKETSIZE]; | 48 | unsigned char chunk[LINE6_FALLBACK_MAXPACKETSIZE]; |
50 | int req, done; | 49 | int req, done; |
51 | 50 | ||
52 | spin_lock_irqsave(&line6->line6midi->midi_transmit_lock, flags); | ||
53 | |||
54 | for (;;) { | 51 | for (;;) { |
55 | req = min(line6_midibuf_bytes_free(mb), line6->max_packet_size); | 52 | req = min(line6_midibuf_bytes_free(mb), line6->max_packet_size); |
56 | done = snd_rawmidi_transmit_peek(substream, chunk, req); | 53 | done = snd_rawmidi_transmit_peek(substream, chunk, req); |
@@ -71,8 +68,6 @@ static void line6_midi_transmit(struct snd_rawmidi_substream *substream) | |||
71 | 68 | ||
72 | send_midi_async(line6, chunk, done); | 69 | send_midi_async(line6, chunk, done); |
73 | } | 70 | } |
74 | |||
75 | spin_unlock_irqrestore(&line6->line6midi->midi_transmit_lock, flags); | ||
76 | } | 71 | } |
77 | 72 | ||
78 | /* | 73 | /* |
@@ -92,7 +87,7 @@ static void midi_sent(struct urb *urb) | |||
92 | if (status == -ESHUTDOWN) | 87 | if (status == -ESHUTDOWN) |
93 | return; | 88 | return; |
94 | 89 | ||
95 | spin_lock_irqsave(&line6->line6midi->send_urb_lock, flags); | 90 | spin_lock_irqsave(&line6->line6midi->lock, flags); |
96 | num = --line6->line6midi->num_active_send_urbs; | 91 | num = --line6->line6midi->num_active_send_urbs; |
97 | 92 | ||
98 | if (num == 0) { | 93 | if (num == 0) { |
@@ -103,12 +98,12 @@ static void midi_sent(struct urb *urb) | |||
103 | if (num == 0) | 98 | if (num == 0) |
104 | wake_up(&line6->line6midi->send_wait); | 99 | wake_up(&line6->line6midi->send_wait); |
105 | 100 | ||
106 | spin_unlock_irqrestore(&line6->line6midi->send_urb_lock, flags); | 101 | spin_unlock_irqrestore(&line6->line6midi->lock, flags); |
107 | } | 102 | } |
108 | 103 | ||
109 | /* | 104 | /* |
110 | Send an asynchronous MIDI message. | 105 | Send an asynchronous MIDI message. |
111 | Assumes that line6->line6midi->send_urb_lock is held | 106 | Assumes that line6->line6midi->lock is held |
112 | (i.e., this function is serialized). | 107 | (i.e., this function is serialized). |
113 | */ | 108 | */ |
114 | static int send_midi_async(struct usb_line6 *line6, unsigned char *data, | 109 | 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, | |||
166 | line6_rawmidi_substream_midi(substream)->line6; | 161 | line6_rawmidi_substream_midi(substream)->line6; |
167 | 162 | ||
168 | line6->line6midi->substream_transmit = substream; | 163 | line6->line6midi->substream_transmit = substream; |
169 | spin_lock_irqsave(&line6->line6midi->send_urb_lock, flags); | 164 | spin_lock_irqsave(&line6->line6midi->lock, flags); |
170 | 165 | ||
171 | if (line6->line6midi->num_active_send_urbs == 0) | 166 | if (line6->line6midi->num_active_send_urbs == 0) |
172 | line6_midi_transmit(substream); | 167 | line6_midi_transmit(substream); |
173 | 168 | ||
174 | spin_unlock_irqrestore(&line6->line6midi->send_urb_lock, flags); | 169 | spin_unlock_irqrestore(&line6->line6midi->lock, flags); |
175 | } | 170 | } |
176 | 171 | ||
177 | static void line6_midi_output_drain(struct snd_rawmidi_substream *substream) | 172 | static void line6_midi_output_drain(struct snd_rawmidi_substream *substream) |
@@ -281,8 +276,7 @@ int line6_init_midi(struct usb_line6 *line6) | |||
281 | rmidi->private_free = snd_line6_midi_free; | 276 | rmidi->private_free = snd_line6_midi_free; |
282 | 277 | ||
283 | init_waitqueue_head(&line6midi->send_wait); | 278 | init_waitqueue_head(&line6midi->send_wait); |
284 | spin_lock_init(&line6midi->send_urb_lock); | 279 | spin_lock_init(&line6midi->lock); |
285 | spin_lock_init(&line6midi->midi_transmit_lock); | ||
286 | line6midi->line6 = line6; | 280 | line6midi->line6 = line6; |
287 | 281 | ||
288 | err = line6_midibuf_init(&line6midi->midibuf_in, MIDI_BUFFER_SIZE, 0); | 282 | err = line6_midibuf_init(&line6midi->midibuf_in, MIDI_BUFFER_SIZE, 0); |
diff --git a/sound/usb/line6/midi.h b/sound/usb/line6/midi.h index ba6bf3828aa5..9d9467b2613c 100644 --- a/sound/usb/line6/midi.h +++ b/sound/usb/line6/midi.h | |||
@@ -40,14 +40,9 @@ struct snd_line6_midi { | |||
40 | int num_active_send_urbs; | 40 | int num_active_send_urbs; |
41 | 41 | ||
42 | /** | 42 | /** |
43 | Spin lock to protect updates of send_urb. | ||
44 | */ | ||
45 | spinlock_t send_urb_lock; | ||
46 | |||
47 | /** | ||
48 | Spin lock to protect MIDI buffer handling. | 43 | Spin lock to protect MIDI buffer handling. |
49 | */ | 44 | */ |
50 | spinlock_t midi_transmit_lock; | 45 | spinlock_t lock; |
51 | 46 | ||
52 | /** | 47 | /** |
53 | Wait queue for MIDI transmission. | 48 | Wait queue for MIDI transmission. |