The following reply was made to PR usb/156596; it has been noted by GNATS.

From: Hans Petter Selasky <hsela...@c2i.net>
To: Colin Percival <cperc...@freebsd.org>
Cc: "bug-follo...@freebsd.org" <bug-follo...@freebsd.org>
Subject: Re: usb/156596: [ehci] Extremely high interrupt rate on ehci/uhci 
IRQ16 80% cpu utilization on CPU0
Date: Sat, 9 Jul 2011 11:48:29 +0200

 --Boundary-00=_tPCGOkni6SDJGZL
 Content-Type: Text/Plain;
   charset="iso-8859-15"
 Content-Transfer-Encoding: 7bit
 
 On Friday 08 July 2011 22:37:45 Colin Percival wrote:
 > Hi,
 > 
 > I'm seeing this ehci interrupt storm with 8.2-RELEASE on my Dell E5420
 > laptop; vmstat -i reports 187300 interrupts per second from ehci.
 > 
 > I've attached my /var/log/messages showing the boot messages and 1 seconds
 > worth of hw.usb.ehci.debug=15 output as suggested.  Hopefully it means
 > more to you than it does to me...
 
 Try the attached patch and report back. The EHCI should never generate more 
 than 8000 IRQ/s second, so this clearly indicates a Hardware Problem.
 
 --HPS
 
 --Boundary-00=_tPCGOkni6SDJGZL
 Content-Type: text/x-patch;
   charset="iso-8859-15";
   name="ehci_fix_terminate.patch"
 Content-Transfer-Encoding: 7bit
 Content-Disposition: inline;
        filename="ehci_fix_terminate.patch"
 
 === ehci.c
 ==================================================================
 --- ehci.c     (revision 223868)
 +++ ehci.c     (local)
 @@ -354,12 +354,9 @@
                    htohc32(sc, EHCI_QH_SET_MULT(1));
                qh->qh_curqtd = 0;
  
 -              qh->qh_qtd.qtd_next =
 -                  htohc32(sc, EHCI_LINK_TERMINATE);
 -              qh->qh_qtd.qtd_altnext =
 -                  htohc32(sc, EHCI_LINK_TERMINATE);
 -              qh->qh_qtd.qtd_status =
 -                  htohc32(sc, EHCI_QTD_HALTED);
 +              qh->qh_qtd.qtd_next = sc->sc_terminate_self;
 +              qh->qh_qtd.qtd_altnext = sc->sc_terminate_self;
 +              qh->qh_qtd.qtd_status = htohc32(sc, EHCI_QTD_HALTED);
        }
  
        /*
 @@ -394,7 +391,7 @@
                qh = sc->sc_intr_p_last[0];
  
                /* the last (1ms) QH terminates */
 -              qh->qh_link = htohc32(sc, EHCI_LINK_TERMINATE);
 +              qh->qh_link = sc->sc_terminate_self;
        }
        for (i = 0; i < EHCI_VIRTUAL_FRAMELIST_COUNT; i++) {
                ehci_sitd_t *sitd;
 @@ -497,8 +494,8 @@
                qh->qh_curqtd = 0;
  
                /* fill the overlay qTD */
 -              qh->qh_qtd.qtd_next = htohc32(sc, EHCI_LINK_TERMINATE);
 -              qh->qh_qtd.qtd_altnext = htohc32(sc, EHCI_LINK_TERMINATE);
 +              qh->qh_qtd.qtd_next = sc->sc_terminate_self;
 +              qh->qh_qtd.qtd_altnext = sc->sc_terminate_self;
                qh->qh_qtd.qtd_status = htohc32(sc, EHCI_QTD_HALTED);
        }
        /* flush all cache into memory */
 
 --Boundary-00=_tPCGOkni6SDJGZL--
_______________________________________________
freebsd-usb@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-usb
To unsubscribe, send any mail to "freebsd-usb-unsubscr...@freebsd.org"

Reply via email to