IRQ handling for ehci and/or uhci causes extremely slow firmware transfer over USB

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi, I've filed a bug at http://bugzilla.kernel.org/show_bug.cgi?id=13779
and was asked to bring it here for discussion.

The short of it is that I have a board that ends up with ehci and uhci on the same interrupt, and in kernel 2.6.27 something changed that causes these two to conflict in some way that causes a firmware upload to take ridiculously long to complete on a USB 2.0 device.

Thanks for any/all help.


Here's the text of the bug, for convenience:

The 950Q TV tuner from Hauppauge uploads its firmware 64 bytes at a time over USB, when you tune a channel. In linux stock kernel 2.6.26 this works fine,
but in 2.6.27 and later (tested up to .30) the firmware transfer takes 15
minutes, rendering the device unusable. This bug is motherboard dependent, and
working with Mike Krufky at Hauppauge (a dvb/v4l contributor) we have
determined that it is a resource conflict between ehci and uhci drivers.

Our main diagnosis is that (using 2.6.30) by disabling the UHCI driver, the
firmware upload no longer exhibits the problem. Our main clue was that on our hardware, ehci and one instance of uhci were sharing an interrupt. They were also sharing an interrupt in 2.6.26, but did not have the slow transfer problem
in that version of the kernel.  The problem showed up in 2.6.27 and later.

Our platform is an embedded Intel Atom board. Other systems with 2.6.30 and uchi enabled do not have this problem, however we have no other systems where
ehci and uhci share an interrupt.

We are willing to help debug and test.

# uname -a
Linux 760t 2.6.30 #2 PREEMPT Tue Jul 14 18:59:30 EDT 2009 i686 GNU/Linux

# cat /proc/cpuinfo
processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model   : 28
model name  : Intel(R) Atom(TM) CPU N270   @ 1.60GHz
stepping : 2
cpu MHz  : 1600.000
cache size  : 512 KB
fdiv_bug : no
hlt_bug  : no
f00f_bug : no
coma_bug : no
fpu   : yes
fpu_exception  : yes
cpuid level : 10
wp    : yes
flags   : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat
clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc arch_perfmon
pebs bts pni dtes64 monitor ds_cpl est tm2 ssse3 xtpr pdcm lahf_lm
bogomips : 3200.25
clflush size   : 64
power management:

With kernel 2.6.30 and uhci enabled (problem exists):
# cat /proc/interrupts
           CPU0
  0:        141   IO-APIC-edge      timer
  1:          4   IO-APIC-edge      i8042
  8:          0   IO-APIC-edge      rtc0
  9:          0   IO-APIC-fasteoi   acpi
 12:          5   IO-APIC-edge      i8042
 14:       1497   IO-APIC-edge      ata_piix
 15:          0   IO-APIC-edge      ata_piix
 16:      28974   IO-APIC-fasteoi   i915, uhci_hcd:usb5, HDA Intel
 18:       6292   IO-APIC-fasteoi   uhci_hcd:usb4
 19:          0   IO-APIC-fasteoi   uhci_hcd:usb3
 23:    3530150   IO-APIC-fasteoi   ehci_hcd:usb1, uhci_hcd:usb2
 27:       5819   PCI-MSI-edge      eth0
NMI:          0   Non-maskable interrupts
LOC:    3905153   Local timer interrupts
SPU:          0   Spurious interrupts
TRM:          0   Thermal event interrupts
ERR:          0
MIS:          0

With kernel 2.6.30 and uhci disabled (problem gone):
# cat /proc/interrupts
           CPU0
  0:        141   IO-APIC-edge      timer
  1:          4   IO-APIC-edge      i8042
  8:          0   IO-APIC-edge      rtc0
  9:          0   IO-APIC-fasteoi   acpi
 12:          5   IO-APIC-edge      i8042
 14:       1358   IO-APIC-edge      ata_piix
 15:          0   IO-APIC-edge      ata_piix
 16:       9828   IO-APIC-fasteoi   i915, HDA Intel
 23:    6461877   IO-APIC-fasteoi   ehci_hcd:usb1
 27:      63782   PCI-MSI-edge      eth0
NMI:          0   Non-maskable interrupts
LOC:   55925030   Local timer interrupts
SPU:          0   Spurious interrupts
TRM:          0   Thermal event interrupts
ERR:          0
MIS:          0

--
Michael Conrad
IntelliTree Solutions llc.
513-552-6362
mconrad@xxxxxxxxxxxxxxx
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux