On Tue, 13 May 2014, Dr. Werner Fink wrote:

> Avoid that the ehci driver cause that the shared IRQ will disabled.
> This behaviour was seen now over several kernel versions with the
> 
> 00:1a.0 USB controller [0c03]: Intel Corporation 6 Series/C200 Series Chipset 
> Family USB Enhanced Host Controller #2 [8086:1c2d] (rev 05) (prog-if 20 
> [EHCI])
>     Subsystem: ASRock Incorporation Device [1849:1c2d]
>     Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- 
> Stepping- SERR- FastB2B- DisINTx-
>     Status: Cap+ 66MHz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- 
> <MAbort- >SERR- <PERR- INTx-
>     Latency: 0
>     Interrupt: pin A routed to IRQ 16
>     Region 0: Memory at f7e08000 (32-bit, non-prefetchable) [size=1K]
>     Capabilities: <access denied>
>     Kernel driver in use: ehci_hcd
> 
> as reported by the command lspci -nnvv on IRQ 16 and as I see in 
> /proc/interrupts
> 
>  16:         38     158526        127          0          0          0        
>   0          0   IO-APIC-fasteoi   ehci_hcd:usb1, eth1
> 
> I had tried two different ethernetcards but the problem never disapeared.
> 
> Signed-off-by: Werner Fink <wer...@suse.de>
> 
> ---
>  drivers/usb/host/ehci-hcd.c |   11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> --- drivers/usb/host/ehci-hcd.c
> +++ drivers/usb/host/ehci-hcd.c       2014-05-13 15:32:03.362235113 +0000
> @@ -686,6 +686,7 @@ static irqreturn_t ehci_irq (struct usb_
>       u32                     status, masked_status, pcd_status = 0, cmd;
>       int                     bh;
>       unsigned long           flags;
> +     static u32              spurious_recl;
>  
>       /*
>        * For threadirqs option we use spin_lock_irqsave() variant to prevent
> @@ -707,11 +708,19 @@ static irqreturn_t ehci_irq (struct usb_
>        * We don't use STS_FLR, but some controllers don't like it to
>        * remain on, so mask it out along with the other status bits.
>        */
> -     masked_status = status & (INTR_MASK | STS_FLR);
> +     masked_status = status & (INTR_MASK | STS_FLR | spurious_recl);
>  
>       /* Shared IRQ? */
>       if (!masked_status || unlikely(ehci->rh_state == EHCI_RH_HALTED)) {
>               spin_unlock_irqrestore(&ehci->lock, flags);
> +             if (masked_status & STS_RECL) {
> +                     /*
> +                      * Avoid repeated schedule status reclamation done
> +                      * by some controllers.
> +                      */
> +                     printk(KERN_WARNING "ehci_irq status: %#8.8x", status);
> +                     spurious_recl |= STS_RECL;
> +             }
>               return IRQ_NONE;
>       }

I have already pointed out that this patch is wrong and won't do
anything.  There's no reason to resubmit it.

Alan Stern

--
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