Google
  Web www.spinics.net

Re: disconnect on one usb2.0 port corrupts the communication on the other

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


On Thu, 18 Oct 2007, Oliver Neukum wrote:

> Am Donnerstag 18 Oktober 2007 schrieb Oliver Neukum:
> > Am Mittwoch 17 Oktober 2007 schrieb Alan Stern:
> > > > switching the ports to USB 1.1 (through bios or /sys/class/usb_hub/usb_hub/companion)
> > > > avoids the error, but is not satisfying solution.
> > > > 
> > > > Does anyone know of this error and/or of an available fix /patch /workarounds?
> > > 
> > > No idea what the problem is.  Suggestions are welcome.
> > 
> > Introduce a guard time after unplugs for which reset is delayed?
> 
> OK, I should elaborate.
> 
> 1. It seems like the original fault is caused by hardware.
>    Therefore we can do nothing about it and must concentrate on error recovery.
> 2. Later on, reset must work, or we'd have bug reports about that long ago.
> 
> Therefore there should be a time window during which the hardware is
> dealing with its internal troubles due to device removal, during which we
> should not mess around with other devices.

It's not quite this simple.  I did some more testing, this time doing
the transfer through the high-speed hub to a g_file_storage gadget.  
Not surprisingly, it tends to be more robust than most other USB
storage devices.

Results varied.  I was able to provoke a couple of different BUGs in 
ehci-hcd; tracking them down will take some time because they occur in 
interrupt context and the machine just locks up.  I'll have to set up a 
serial console...

However on at least one occasion things worked more or less as
expected.  That is, the disconnect occurred while a transfer was in
progress.  A 65536-byte bulk-in transfer stopped after 64512 bytes with
error code -121, indicating that the EHCI controller thinks it received
a 0-length packet when the gadget did not send one.  This is clearly a
hardware bug; it's difficult to say whether the bug is in the
controller or in the external high-speed hub.  (Maybe I should try a 
test without the hub.)

Anyway, the following CSW transfer failed with error -75, probably 
because the gadget was still sending 512-byte bulk data packets instead 
of the expected 13-byte CSW.  The system went through a normal 
port-reset sequence, and the transfer continued without error!

This suggests that our error-recovery procedure is more or less 
correct.  The fact that it fails when a flash device is used rather 
than g_file_storage may simply indicate that the device doesn't cope 
properly with a port reset while it's in the middle of doing a 
transfer.  I don't know of any way to do a stronger kind of reset.

Alan Stern


-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems?  Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
linux-usb-devel@xxxxxxxxxxxxxxxxxxxxx
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel


[Home]     [Video for Linux]     [Photo]     [Yosemite Forum]     [Yosemite Photos]    [Video Projectors]     [PDAs]     [Hacking TiVo]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Devices]     [Big List of Linux Books]     [Free Dating]

  Powered by Linux