[PATCH] UHCI: use dummy TDs
authorAlan Stern <stern@rowland.harvard.edu>
Sat, 17 Dec 2005 23:00:12 +0000 (18:00 -0500)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 20 Mar 2006 22:49:57 +0000 (14:49 -0800)
commitaf0bb5998abe8ed28ee354dd4c71689cacdc91e9
tree20172dd9551d0e2497ef4b6dff1a84f010f981ab
parentdccf4a48d47120a42382ba526f1a0848c13ba2a4
[PATCH] UHCI: use dummy TDs

This patch (as624) fixes a hardware race in uhci-hcd by adding a dummy
TD to the end of each endpoint's queue.  Without the dummy the host
controller will effectively turn off the queue when it reaches the end,
which happens asynchronously.  This leads to a potential problem when
new transfer descriptors are added to the end of the queue; they may
never get used.

With a dummy TD present the controller never turns off the queue;
instead it just stops at the dummy and leaves the queue on but inactive.
When new TDs are added to the end of the queue, the first new one gets
written over the dummy.  Thus there's never any question about whether
the queue is running or needs to be restarted.

Signed-off-by: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/host/uhci-debug.c
drivers/usb/host/uhci-hcd.h
drivers/usb/host/uhci-q.c