On Mon, 25 Jun 2018, Sebastian Andrzej Siewior wrote: > 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: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> > Cc: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > --- > drivers/usb/core/devio.c | 6 ++++-- > 1 file changed, 4 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/core/devio.c b/drivers/usb/core/devio.c > index 476dcc5f2da3..cea35fa4e7a3 100644 > --- a/drivers/usb/core/devio.c > +++ b/drivers/usb/core/devio.c > @@ -585,9 +585,10 @@ static void async_completed(struct urb *urb) > struct siginfo sinfo; > struct pid *pid = NULL; > const struct cred *cred = NULL; > + unsigned long flags; > int signr; > > - spin_lock(&ps->lock); > + spin_lock_irqsave(&ps->lock, flags); > list_move_tail(&as->asynclist, &ps->async_completed); > as->status = urb->status; > signr = as->signr; > @@ -611,7 +612,7 @@ static void async_completed(struct urb *urb) > cancel_bulk_urbs(ps, as->bulk_addr); > > wake_up(&ps->wait); > - spin_unlock(&ps->lock); > + spin_unlock_irqrestore(&ps->lock, flags); > > if (signr) { > kill_pid_info_as_cred(sinfo.si_signo, &sinfo, pid, cred); > @@ -1702,6 +1703,7 @@ static int proc_do_submiturb(struct usb_dev_state *ps, struct usbdevfs_urb *uurb > > as->urb->context = as; > as->urb->complete = async_completed; > + This change is unrelated to the purpose of the patch. It should be removed. > for (totlen = u = 0; u < number_of_packets; u++) { > as->urb->iso_frame_desc[u].offset = totlen; > as->urb->iso_frame_desc[u].length = isopkt[u].length; Aside from that: Acked-by: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> Alan Stern -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html