Subject: Fix/workarond for USB ** host controller halted ** errors?
To: None <tech-kern@netbsd.org, tech-i386@netbsd.org,>
From: None <davef1624@aol.com>
List: tech-kern
Date: 10/04/2005 19:52:42
On a heavily loaded i386 (dual-Xeon) based system,
using Intel's ICH3 I/O controller chip (which includes a 1.1 USB HC),
I'm seeing the following uhci errors:

kernel: uhci1: host controller process error
kernel: uhci1: host controller halted

This occurs after several hours of load on the system.
Apparently, the USB host controller complains about an inconsistency 
when processing
one of the TD's in its Frame List.

Is there any workaround and/or fix for this issue?
I don't want to reboot to solve this.

In reviewing the uhci code, there could be a race-condition when 
adding/removing Queue Heads
between the HCD and the HC;
specifically, the T-bit needs to be set in the elink field of the QH so 
that the HC
doesn't follow the pointer.
However, after setting the T-bit, there is a call to 
delay(UHCI_QH_REMOVE_DELAY)
to give the HC time to stop looking at the TD.

Could this delay() be insufficient at times, depending on the platform 
in use and/or load on the system?

Any help you can provide is greatly appreciated.
thanks,
Dave