Subject: Re: Fix/workarond for USB ** host controller halted ** errors?
To: None <davef1624@aol.com>
From: Hans Petter Selasky <hselasky@c2i.net>
List: tech-kern
Date: 10/05/2005 12:59:36
On Wednesday 05 October 2005 01:52, davef1624@aol.com wrote:
> 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.

The UHCI driver must remove all QH's from the schedule before touching 
anything. As long as a QH is in the schedule, it is owned by the USB  
controller! That I think is the reason for the problem, which also happens to 
be the case with the EHCI driver.

--HPS