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;