aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/usb/core/hcd.c16
-rw-r--r--drivers/usb/host/ehci-ls1x.c2
-rw-r--r--drivers/usb/host/ohci-xls.c2
3 files changed, 2 insertions, 18 deletions
diff --git a/drivers/usb/core/hcd.c b/drivers/usb/core/hcd.c
index 6e4fd28bc242..35b52f6e1c5e 100644
--- a/drivers/usb/core/hcd.c
+++ b/drivers/usb/core/hcd.c
@@ -2153,15 +2153,8 @@ EXPORT_SYMBOL_GPL(usb_bus_start_enum);
2153irqreturn_t usb_hcd_irq (int irq, void *__hcd) 2153irqreturn_t usb_hcd_irq (int irq, void *__hcd)
2154{ 2154{
2155 struct usb_hcd *hcd = __hcd; 2155 struct usb_hcd *hcd = __hcd;
2156 unsigned long flags;
2157 irqreturn_t rc; 2156 irqreturn_t rc;
2158 2157
2159 /* IRQF_DISABLED doesn't work correctly with shared IRQs
2160 * when the first handler doesn't use it. So let's just
2161 * assume it's never used.
2162 */
2163 local_irq_save(flags);
2164
2165 if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd))) 2158 if (unlikely(HCD_DEAD(hcd) || !HCD_HW_ACCESSIBLE(hcd)))
2166 rc = IRQ_NONE; 2159 rc = IRQ_NONE;
2167 else if (hcd->driver->irq(hcd) == IRQ_NONE) 2160 else if (hcd->driver->irq(hcd) == IRQ_NONE)
@@ -2169,7 +2162,6 @@ irqreturn_t usb_hcd_irq (int irq, void *__hcd)
2169 else 2162 else
2170 rc = IRQ_HANDLED; 2163 rc = IRQ_HANDLED;
2171 2164
2172 local_irq_restore(flags);
2173 return rc; 2165 return rc;
2174} 2166}
2175EXPORT_SYMBOL_GPL(usb_hcd_irq); 2167EXPORT_SYMBOL_GPL(usb_hcd_irq);
@@ -2357,14 +2349,6 @@ static int usb_hcd_request_irqs(struct usb_hcd *hcd,
2357 int retval; 2349 int retval;
2358 2350
2359 if (hcd->driver->irq) { 2351 if (hcd->driver->irq) {
2360
2361 /* IRQF_DISABLED doesn't work as advertised when used together
2362 * with IRQF_SHARED. As usb_hcd_irq() will always disable
2363 * interrupts we can remove it here.
2364 */
2365 if (irqflags & IRQF_SHARED)
2366 irqflags &= ~IRQF_DISABLED;
2367
2368 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d", 2352 snprintf(hcd->irq_descr, sizeof(hcd->irq_descr), "%s:usb%d",
2369 hcd->driver->description, hcd->self.busnum); 2353 hcd->driver->description, hcd->self.busnum);
2370 retval = request_irq(irqnum, &usb_hcd_irq, irqflags, 2354 retval = request_irq(irqnum, &usb_hcd_irq, irqflags,
diff --git a/drivers/usb/host/ehci-ls1x.c b/drivers/usb/host/ehci-ls1x.c
index aa0f328922df..ca759652626b 100644
--- a/drivers/usb/host/ehci-ls1x.c
+++ b/drivers/usb/host/ehci-ls1x.c
@@ -113,7 +113,7 @@ static int ehci_hcd_ls1x_probe(struct platform_device *pdev)
113 goto err_put_hcd; 113 goto err_put_hcd;
114 } 114 }
115 115
116 ret = usb_add_hcd(hcd, irq, IRQF_DISABLED | IRQF_SHARED); 116 ret = usb_add_hcd(hcd, irq, IRQF_SHARED);
117 if (ret) 117 if (ret)
118 goto err_put_hcd; 118 goto err_put_hcd;
119 119
diff --git a/drivers/usb/host/ohci-xls.c b/drivers/usb/host/ohci-xls.c
index 41e378f17c66..84201cd1a472 100644
--- a/drivers/usb/host/ohci-xls.c
+++ b/drivers/usb/host/ohci-xls.c
@@ -56,7 +56,7 @@ static int ohci_xls_probe_internal(const struct hc_driver *driver,
56 goto err3; 56 goto err3;
57 } 57 }
58 58
59 retval = usb_add_hcd(hcd, irq, IRQF_DISABLED | IRQF_SHARED); 59 retval = usb_add_hcd(hcd, irq, IRQF_SHARED);
60 if (retval != 0) 60 if (retval != 0)
61 goto err4; 61 goto err4;
62 return retval; 62 return retval;