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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to