diff options
Diffstat (limited to 'debian/patches-rt/0035-usb-do-no-disable-interrupts-in-giveback.patch')
-rw-r--r-- | debian/patches-rt/0035-usb-do-no-disable-interrupts-in-giveback.patch | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/debian/patches-rt/0035-usb-do-no-disable-interrupts-in-giveback.patch b/debian/patches-rt/0035-usb-do-no-disable-interrupts-in-giveback.patch new file mode 100644 index 000000000..07b1ab8e9 --- /dev/null +++ b/debian/patches-rt/0035-usb-do-no-disable-interrupts-in-giveback.patch @@ -0,0 +1,46 @@ +From 58c679541448da375ccc262585f3172e913811f3 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/347] usb: do no disable interrupts in giveback +Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/4.19/older/patches-4.19.246-rt110.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 df661460e9f9..1a1487d312d0 100644 +--- a/drivers/usb/core/hcd.c ++++ b/drivers/usb/core/hcd.c +@@ -1752,7 +1752,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) && +@@ -1780,9 +1779,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.36.1 + |