usb/156596: [ehci] Extremely high interrupt rate on ehci/uhci
IRQ16 80% cpu utilization on CPU0
Hans Petter Selasky
hselasky at c2i.net
Sat Jul 9 10:00:25 UTC 2011
The following reply was made to PR usb/156596; it has been noted by GNATS.
From: Hans Petter Selasky <hselasky at c2i.net>
To: Colin Percival <cperciva at freebsd.org>
Cc: "bug-followup at FreeBSD.org" <bug-followup at 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--
More information about the freebsd-usb
mailing list