Hi Alan;
Am Donnerstag, den 13.02.2014, 15:55 -0500 schrieb Alan Stern:
> Stefani, please try the patch below, with "threadirq" and the plain
> vanilla kernel. It ought to fix your problem, but let's make certain.
I tried the patch on 3.13.2 together with the commit 88ed9fd50e57 and it
seems that it solves the problem.
I also tried the current 3.14.0-rc2-00271-g4675348 without any
modifications and without our patch... and it also works.
Both are tested with the kernel parameter "threadirqs".
- Stefani
>
>
> Index: usb-3.14/drivers/usb/host/ehci-hcd.c
> ===================================================================
> --- usb-3.14.orig/drivers/usb/host/ehci-hcd.c
> +++ usb-3.14/drivers/usb/host/ehci-hcd.c
> @@ -683,10 +683,11 @@ EXPORT_SYMBOL_GPL(ehci_setup);
> static irqreturn_t ehci_irq (struct usb_hcd *hcd)
> {
> struct ehci_hcd *ehci = hcd_to_ehci (hcd);
> + unsigned long flags;
> u32 status, masked_status, pcd_status = 0, cmd;
> int bh;
>
> - spin_lock (&ehci->lock);
> + spin_lock_irqsave(&ehci->lock, flags);
>
> status = ehci_readl(ehci, &ehci->regs->status);
>
> @@ -704,7 +705,7 @@ static irqreturn_t ehci_irq (struct usb_
>
> /* Shared IRQ? */
> if (!masked_status || unlikely(ehci->rh_state == EHCI_RH_HALTED)) {
> - spin_unlock(&ehci->lock);
> + spin_unlock_irqrestore(&ehci->lock, flags);
> return IRQ_NONE;
> }
>
> @@ -815,7 +816,7 @@ dead:
>
> if (bh)
> ehci_work (ehci);
> - spin_unlock (&ehci->lock);
> + spin_unlock_irqrestore(&ehci->lock, flags);
> if (pcd_status)
> usb_hcd_poll_rh_status(hcd);
> return IRQ_HANDLED;
>
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html