From c2f85857815236fb7367336e1a6f1edcc87b137b Mon Sep 17 00:00:00 2001 From: Sebastian Andrzej Siewior Date: Fri, 8 Nov 2013 17:34:54 +0100 Subject: [PATCH 037/266] usb: do no disable interrupts in giveback Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.31-rt18.tar.xz Since commit 94dfd7ed ("USB: HCD: support giveback of URB in tasklet context") the USB code disables interrupts before invoking the complete callback. This should not be required the HCD completes the URBs either in hard-irq context or in BH context. Lockdep may report false positives if one has two HCDs (one completes in IRQ and the other in BH context) and is using the same USB driver (device) with both HCDs. This is safe since the same URBs are never mixed with those two HCDs. Longeterm we should force all HCDs to complete in the same context. Signed-off-by: Sebastian Andrzej Siewior --- drivers/usb/core/hcd.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c index 1c21955fe7c0..7863dec34f0b 100644 --- a/drivers/usb/core/hcd.c +++ b/drivers/usb/core/hcd.c @@ -1738,7 +1738,6 @@ static void __usb_hcd_giveback_urb(struct urb *urb) struct usb_hcd *hcd = bus_to_hcd(urb->dev->bus); struct usb_anchor *anchor = urb->anchor; int status = urb->unlinked; - unsigned long flags; urb->hcpriv = NULL; if (unlikely((urb->transfer_flags & URB_SHORT_NOT_OK) && @@ -1766,9 +1765,7 @@ static void __usb_hcd_giveback_urb(struct urb *urb) * and no one may trigger the above deadlock situation when * running complete() in tasklet. */ - local_irq_save(flags); urb->complete(urb); - local_irq_restore(flags); usb_anchor_resume_wakeups(anchor); atomic_dec(&urb->use_count); -- 2.20.1