Re: [PATCH REPOST 2/2] ALSA: usb-midi: use irqsave() in USB's complete callback

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Sebastian Andrzej Siewior wrote:
> From: John Ogness <john.ogness@xxxxxxxxxxxxx>
>
> The USB completion callback does not disable interrupts while acquiring
> the lock. We want to remove the local_irq_disable() invocation from
> __usb_hcd_giveback_urb() and therefore it is required for the callback
> handler to disable the interrupts while acquiring the lock.
> The callback may be invoked either in IRQ or BH context depending on the
> USB host controller.
> Use the _irqsave() variant of the locking primitives.
>
> Cc: Clemens Ladisch <clemens@xxxxxxxxxx>
> Cc: Jaroslav Kysela <perex@xxxxxxxx>
> Cc: Takashi Iwai <tiwai@xxxxxxxx>
> Signed-off-by: John Ogness <john.ogness@xxxxxxxxxxxxx>
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>

Acked-by: Clemens Ladisch <clemens@xxxxxxxxxx>

> ---
>  sound/usb/midi.c | 5 +++--
>  1 file 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) {
_______________________________________________
Alsa-devel mailing list
Alsa-devel@xxxxxxxxxxxxxxxx
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel



[Index of Archives]     [ALSA User]     [Linux Audio Users]     [Kernel Archive]     [Asterisk PBX]     [Photo Sharing]     [Linux Sound]     [Video 4 Linux]     [Gimp]     [Yosemite News]

  Powered by Linux