usb: wusbcore: remove excessive irqsave
wa_urb_dequeue() locks multiple spinlocks while disabling interrupts: spin_lock_irqsave(&lock1, flags); spin_lock_irqsave(&lock2, flags2); Obviously there is no need for the second irqsave and "flags2" variable since interrupts are disabled at that point. Remove the second irqsave: spin_lock_irqsave(&lock1, flags); spin_lock(&lock2); and eliminate the flags2 variable. Signed-off-by: John Ogness <john.ogness@linutronix.de> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
8982c8440f
commit
7375fc9f5f
|
@ -1918,7 +1918,7 @@ EXPORT_SYMBOL_GPL(wa_urb_enqueue);
|
|||
*/
|
||||
int wa_urb_dequeue(struct wahc *wa, struct urb *urb, int status)
|
||||
{
|
||||
unsigned long flags, flags2;
|
||||
unsigned long flags;
|
||||
struct wa_xfer *xfer;
|
||||
struct wa_seg *seg;
|
||||
struct wa_rpipe *rpipe;
|
||||
|
@ -1964,10 +1964,10 @@ int wa_urb_dequeue(struct wahc *wa, struct urb *urb, int status)
|
|||
goto out_unlock;
|
||||
}
|
||||
/* Check the delayed list -> if there, release and complete */
|
||||
spin_lock_irqsave(&wa->xfer_list_lock, flags2);
|
||||
spin_lock(&wa->xfer_list_lock);
|
||||
if (!list_empty(&xfer->list_node) && xfer->seg == NULL)
|
||||
goto dequeue_delayed;
|
||||
spin_unlock_irqrestore(&wa->xfer_list_lock, flags2);
|
||||
spin_unlock(&wa->xfer_list_lock);
|
||||
if (xfer->seg == NULL) /* still hasn't reached */
|
||||
goto out_unlock; /* setup(), enqueue_b() completes */
|
||||
/* Ok, the xfer is in flight already, it's been setup and submitted.*/
|
||||
|
@ -2054,7 +2054,7 @@ out_unlock:
|
|||
|
||||
dequeue_delayed:
|
||||
list_del_init(&xfer->list_node);
|
||||
spin_unlock_irqrestore(&wa->xfer_list_lock, flags2);
|
||||
spin_unlock(&wa->xfer_list_lock);
|
||||
xfer->result = urb->status;
|
||||
spin_unlock_irqrestore(&xfer->lock, flags);
|
||||
wa_xfer_giveback(xfer);
|
||||
|
|
Loading…
Reference in New Issue