If a hard IRQ occurs during the soft IRQ TX processing, a recursive
spinlock BUG can occur.
Prevent this by interrupt-off locking around usb_hcd_link_urb_to_ep()
Found while testing bluetooth A2DP audio over USB.
Signed-off-by: Kevin Hilman <khilman@mvista.com>
Signed-off-by: Tony Lindgren <tony@atomide.com>
if (!is_host_active(musb) || !musb->is_active)
return -ENODEV;
+ spin_lock_irqsave(&musb->lock, flags);
ret = usb_hcd_link_urb_to_ep(hcd, urb);
+ spin_unlock_irqrestore(&musb->lock, flags);
if (ret)
return ret;