Eric Lussard wrote:

Hello list,


I've got some problems with my DVD writer in an external USB-IDE case, using the EHCI driver.

It seems that the combination of Linux drivers -- SCSI, usb-storage, and EHCI -- causes those GeneSys USB-IDE cases indigestion, so they'll lock up part way through the transfer.

At this time the problem appears to be on the device side; folk
who've applied the attached EHCI diagnostics patch have consistently
returned results consistent with a device that stopped responding.
And, as in your case, no longer responding to anything else after
that initial failure ... which can't really be anything except a
hardware problem in the USB device.

So unless you can help isolate and fix whatever is giving that
hardware indigestion, it'd be worth getting different hardware.
Folk with other storage adapters don't seem to have the same
degree of trouble as those with the GeneSys adapters.

- Dave



 USB/IDE box from /proc/bus/usb/devices:
T:  Bus=01 Lev=01 Prnt=01 Port=04 Cnt=01 Dev#=  2 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=00(>ifc ) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=05e3 ProdID=0701 Rev= 0.02
S:  Manufacturer=Genesyslogic
S:  Product=USB Mass Storage Device
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=  4mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=08(stor.) Sub=02 Prot=50 Driver=usb-storage
E:  Ad=81(I) Atr=02(Bulk) MxPS= 512 Ivl=0ms
E:  Ad=02(O) Atr=02(Bulk) MxPS= 512 Ivl=125us

--- 1.16/drivers/usb/host/ehci-q.c      Thu Jun 19 06:51:52 2003
+++ edited/ehci-q.c     Sun Aug 10 12:06:53 2003
@@ -267,6 +267,7 @@
        unsigned                count = 0;
        int                     do_status = 0;
        u8                      state;
+       u8                      dumped = 0;
 
        if (unlikely (list_empty (&qh->qtd_list)))
                return count;
@@ -347,6 +348,19 @@
                                do_status = 0;
                                continue;
                        }
+#if 1
+                       switch (urb->status) {
+                       default:
+                               break;
+                       case -ECONNRESET:               /* canceled */
+                       case -ENOENT:
+                               if (!dumped) {
+                                       dumped = 1;
+                                       dbg_qh ("cancel", ehci, qh);
+                               }
+                               dbg_qtd ("cancel", ehci, qtd);
+                       }
+#endif
 
                        /* token in overlay may be most current */
                        if (state == QH_STATE_IDLE

Reply via email to