diff options
Diffstat (limited to 'sound/usb/midi.c')
| -rw-r--r-- | sound/usb/midi.c | 5 | 
1 files changed, 3 insertions, 2 deletions
diff --git a/sound/usb/midi.c b/sound/usb/midi.c index 2c1aaa3292bf..dcfc546d81b9 100644 --- a/sound/usb/midi.c +++ b/sound/usb/midi.c @@ -281,15 +281,16 @@ static void snd_usbmidi_out_urb_complete(struct urb *urb)  	struct out_urb_context *context = urb->context;  	struct snd_usb_midi_out_endpoint *ep = context->ep;  	unsigned int urb_index; +	unsigned long flags; -	spin_lock(&ep->buffer_lock); +	spin_lock_irqsave(&ep->buffer_lock, flags);  	urb_index = context - ep->urbs;  	ep->active_urbs &= ~(1 << urb_index);  	if (unlikely(ep->drain_urbs)) {  		ep->drain_urbs &= ~(1 << urb_index);  		wake_up(&ep->drain_wait);  	} -	spin_unlock(&ep->buffer_lock); +	spin_unlock_irqrestore(&ep->buffer_lock, flags);  	if (urb->status < 0) {  		int err = snd_usbmidi_urb_error(urb);  		if (err < 0) {  |