Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 28 Oct 2012 09:07:55 -0500
From:      Ian <yoitsmeremember@gmail.com>
To:        freebsd-usb@freebsd.org
Subject:   Hardware failure or bug in ehci?
Message-ID:  <508D3C3B.2000506@gmail.com>

next in thread | raw e-mail | index | archive | help
I recently plugged in a new KVM (Monoprice KCF-181S) to my FreeBSD 
machines (the machine in question a Jetway NF9A-Q67), and found a high 
interrupt rate when using top.  The usb and KVM appear like so in dmesg:

ehci0: <EHCI (generic) USB 2.0 controller> mem 0xfe523000-0xfe5233ff irq 
16 at device 26.0 on pci0
usbus0: EHCI version 1.0
usbus0 on ehci0
...
ehci1: <EHCI (generic) USB 2.0 controller> mem 0xfe522000-0xfe5223ff irq 
23 at device 29.0 on pci0
usbus1: EHCI version 1.0
usbus1 on ehci1
...
usbus0: 480Mbps High Speed USB v2.0
usbus1: 480Mbps High Speed USB v2.0
ugen0.1: <Intel> at usbus0
uhub0: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus0
ugen1.1: <Intel> at usbus1
uhub1: <Intel EHCI root HUB, class 9/0, rev 2.00/1.00, addr 1> on usbus1
...
ugen0.2: <vendor 0x8087> at usbus0
uhub2: <vendor 0x8087 product 0x0024, class 9/0, rev 2.00/0.00, addr 2> 
on usbus0
ugen1.2: <vendor 0x8087> at usbus1
uhub3: <vendor 0x8087 product 0x0024, class 9/0, rev 2.00/0.00, addr 2> 
on usbus1
...
uhub2: 6 ports with 6 removable, self powered
uhub3: 8 ports with 8 removable, self powered
...
ugen0.3: <vendor 0x0b39> at usbus0
ukbd0: <vendor 0x0b39 product 0x1001, class 0/0, rev 1.10/1.00, addr 3> 
on usbus0
kbd2 at ukbd0
ums0: <vendor 0x0b39 product 0x1001, class 0/0, rev 1.10/1.00, addr 3> 
on usbus0
ums0: 5 buttons and [XYZ] coordinates ID=1

Investigating further, I found this:

% uname -a
FreeBSD pyrite 9.1-RC2 FreeBSD 9.1-RC2 #0 r241608: Tue Oct 16 18:18:23 
UTC 2012     root@pyrite:/usr/obj/usr/src/sys/PYRITE  amd64

% vmstat -i
interrupt                          total       rate
irq1: atkbd0                          29          0
irq4: uart0                          395          0
irq16: ehci0                 14852890008      61807
irq23: ehci1                      626348          2
cpu0:timer                     267891392       1114
irq264: em0                        66802          0
irq265: em1:rx 0                  844347          3
irq266: em1:tx 0                  292193          1
irq267: em1:link                       9          0
irq268: ahci0                     221681          0
cpu1:timer                     221101117        920
cpu3:timer                       1504868          6
cpu2:timer                       1336765          5
Total                        15346775954      63862

# usbconfig
ugen0.1: <EHCI root HUB Intel> at usbus0, cfg=0 md=HOST spd=HIGH 
(480Mbps) pwr=SAVE
ugen1.1: <EHCI root HUB Intel> at usbus1, cfg=0 md=HOST spd=HIGH 
(480Mbps) pwr=SAVE
ugen0.2: <product 0x0024 vendor 0x8087> at usbus0, cfg=0 md=HOST 
spd=HIGH (480Mbps) pwr=SAVE
ugen1.2: <product 0x0024 vendor 0x8087> at usbus1, cfg=0 md=HOST 
spd=HIGH (480Mbps) pwr=SAVE
ugen0.3: <Combo Free KVM 816 V2.00 OCT> at usbus0, cfg=0 md=HOST 
spd=FULL (12Mbps) pwr=ON

Nearly 62K interrupts/second on ehci0!  After much testing, I've found 
that this is an intermittent problem.  I'll summarize:

- Even in identical hardware configurations (i.e. everything plugged 
into the same port), sometimes I see the high interrupt rate, and 
sometimes I don't.
- Once I see the high interrupt rate, there is no way to make it stop 
without rebooting.  Even if I unplug the KVM, I will continue to see the 
interrupt rate climb until I reboot.
- The easiest way to reproduce the issue is to unplug everything KVM 
related (the VGA, the PS/2 keyboard port, and the USB), and plug it all 
back in (VGA first, followed by PS/2 keyboard, followed by USB--though 
I'm unsure if order matters).  Often, though not always, unplugging and 
replugging the USB alone is not enough to cause the high interrupt rate.
- Perhaps the strangest of all, the high interrupt rate always appears 
on ehci0 even if I only plugged the KVM into a usbus1 (and therefore 
ehci1) port!
- I can't reproduce the issue on any other machines the KVM is plugged 
into (all also running FreeBSD 9.1-RC2/amd64), but they all feature uhci 
in addition to ehci, and use a different ehci controller.  However, on 
the problematic machine, it appears to be able to happen regardless of 
the port/cable of the KVM I use (despite those ports working fine with 
my other machines).

So, my questions are:
1. Most importantly, where do you think the problem lies?  The KVM 
itself, the FreeBSD machine's hardware, or a bug in the kernel/driver?
2. Why would it appear as a high interrupt rate on ehci0 when it's only 
plugged into usbus1 which is on ehci1?
3. Why doesn't the issue appear on any of the other machines I have 
plugged into the KVM?  Simply because they use different controllers, or 
does the presence of uhci (which shares an interrupt with ehci0 on those 
machines) potentially have something to do with it?

I know the last question may be unanswerable, as there are so many 
variables in play.



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?508D3C3B.2000506>