47 lines
1.8 KiB
Diff
47 lines
1.8 KiB
Diff
From 07883a7dceb3c9bbdd7c8deb51d2d069cda79118 Mon Sep 17 00:00:00 2001
|
|
From: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
|
|
Date: Fri, 8 Nov 2013 17:34:54 +0100
|
|
Subject: [PATCH 035/291] usb: do no disable interrupts in giveback
|
|
Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.90-rt35.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 <bigeasy@linutronix.de>
|
|
---
|
|
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 b82a7d787add..2f3015356124 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.24.0
|
|
|