USB1.1/USB2.0 consecutive transfers on the same bus within Linux

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

 



Hi,

Our company is trying to use a USB2VGA adapter from StarTech.com (practically it is a sisusbvga stuff)
under OpenSuse. The USB2VGA adapter operates at USB 2.0 high speed. We also have a USB 1.1 printer
using usblp. The 2 devices are one the same bus.

T:  Bus=04 Lev=02 Prnt=02 Port=03 Cnt=01 Dev#=  6 Spd=480 MxCh= 0
D:  Ver= 2.00 Cls=ff(vend.) Sub=00 Prot=00 MxPS=64 #Cfgs=  1
P:  Vendor=0711 ProdID=0900 Rev= 1.10
C:* #Ifs= 1 Cfg#= 1 Atr=80 MxPwr=222mA
I:  If#= 0 Alt= 0 #EPs= 9 Cls=ff(vend.) Sub=00 Prot=00 Driver=sisusb

T:  Bus=04 Lev=02 Prnt=02 Port=05 Cnt=02 Dev#=  7 Spd=12  MxCh= 0
D:  Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs=  1
P:  Vendor=13ea ProdID=0326 Rev= 0.16
S:  Manufacturer= Scientific Games Ltd
S:  Product=USB PRINTER
S:  SerialNumber=0100001060577867
C:* #Ifs= 1 Cfg#= 1 Atr=c0 MxPwr=400mA
I:  If#= 0 Alt= 0 #EPs= 2 Cls=07(print) Sub=01 Prot=02 Driver=usblp

When doing transfers to the printer the sisusbvga starts to act crazy, starts - after a while - refusing URBs with
EPIPE or similar.

c1b244c0 2517956235 S Bo:007:01 EINPROGRESS 3 = 1b4f01
c1b244c0 2517956297 C Bo:007:01 0 3 >
c1b244c0 2517956406 S Bo:007:01 EINPROGRESS 6 = 1b540000 1532
c1b244c0 2517956546 C Bo:007:01 0 6 >
c1b244c0 2517956594 S Bo:007:01 EINPROGRESS 2 = 1b43
c1b244c0 2517956671 C Bo:007:01 0 2 >
f755e4c0 2517956721 S Ci:007:00 s a1 01 0000 0000 0001 1 <
f755e4c0 2517956922 C Ci:007:00 0 1 = 18
f7c486c0 2517956927 C Bo:004:03 0 60896 >
c1b244c0 2517957942 S Bo:007:01 EINPROGRESS 1024 = 1b2a5000 20000000 00000000 00000000 00000000 00000000 00000000 00000000
c1b244c0 2517963921 C Bo:007:01 0 1024 >
c1b244c0 2517963936 S Bo:007:01 EINPROGRESS 1024 = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
f7c487c0 2517967918 S Bo:004:13 EINPROGRESS 10 = 1f00d401 0000102c 01d0
f7c487c0 2517968044 C Bo:004:13 EPIPE 0
f7c487c0 2517968059 S Bo:004:13 EINPROGRESS 10 = 1f00d001 0000e0ed 1b00
f7c487c0 2517968294 C Bo:004:13 EPIPE 0
f7c487c0 2517968308 S Bo:004:13 EINPROGRESS 10 = 1f00c001 00001600 0000
f7c487c0 2517968544 C Bo:004:13 EPIPE 0
f7c487c0 2517968637 S Bo:004:03 EINPROGRESS 65536 = 000000ff 000000ff 000000ff 000000ff 000000ff 000000ff 000000ff 000000ff
f7ced2c0 2517968726 S Bo:004:03 EINPROGRESS 65536 = 000000ff 000000ff 000000ff 000000ff 000000ff 000000ff 000000ff 000000ff
f7ce7140 2517968804 S Bo:004:03 EINPROGRESS 65536 = 000000ff 000000ff 000000ff 000000ff 000000ff 000000ff 000000ff 000000ff

If the devices are connected on different buses, the issue does not happen. Sadly we can't do that on the target
device.
We have tracked down the issue until the point that on XP Embedded, XP does not allow consecutive transfers of different
speeds for devices on the same bus, practically the VGA playback is paused while the printer transfer is done.
We could conclude the same with logs from USB sniffers. DEV=05 is the 1.1 printer, DEV=04 is the USB2VGA.

254305,0:04.200.661.500,66 ns,,,,,[1 SOF]
254318,0:04.200.778.350,66 ns,,,OUT,0C,DEV=05  EP=01
254319,0:04.200.778.683,1.133 us,64,,DATA0,D0BF,00 00 00 ...
254320,0:04.200.786.500,66 ns,,,,,[1 SOF]
254321,0:04.200.790.950,66 ns,,,PING,0D,DEV=04  EP=0D
254322,0:04.200.791.466,33 ns,,,ACK,,
254337,0:04.200.911.500,66 ns,,,,,[1 SOF]
254351,0:04.201.036.483,83 ns,,,,,[1 SOF]
254352,0:04.201.036.816,83 ns,,,PING,0D,DEV=04  EP=0D
254353,0:04.201.037.350,33 ns,,,ACK,,
254367,0:04.201.138.416,83 ns,,,OUT,0C,DEV=05  EP=01
254368,0:04.201.138.766,1.150 us,64,,DATA0,D0BF,00 00 00 ...
254369,0:04.201.161.483,83 ns,,,,,[1 SOF]
254383,0:04.201.286.483,83 ns,,,,,[1 SOF]
254384,0:04.201.286.816,83 ns,,,PING,0D,DEV=04  EP=0D
254385,0:04.201.287.350,50 ns,,,ACK,,
254400,0:04.201.411.483,83 ns,,,,,[1 SOF]
254413,0:04.201.519.500,83 ns,,,OUT,0C,DEV=05  EP=01
254414,0:04.201.519.833,1.150 us,64,,DATA1,D0BF,00 00 00 ...
254415,0:04.201.536.483,83 ns,,,,,[1 SOF]
254432,0:04.201.661.483,66 ns,,,,,[1 SOF]
254433,0:04.201.673.116,66 ns,,,OUT,16,DEV=04  EP=03
254434,0:04.201.673.466,8.600 us,512,,DATA1,44BE,00 00 00 ...
254435,0:04.201.682.500,50 ns,,,ACK,,
254454,0:04.201.786.483,66 ns,,,,,[1 SOF]
254455,0:04.201.788.866,66 ns,,,OUT,16,DEV=04  EP=03
254456,0:04.201.789.216,8.600 us,512,,DATA1,44BE,00 00 00 ...
254457,0:04.201.798.250,50 ns,,,ACK,,
254477,0:04.201.911.483,66 ns,,,,,[1 SOF]
254478,0:04.201.911.816,66 ns,,,OUT,16,DEV=04  EP=03
254479,0:04.201.912.166,8.600 us,512,,DATA1,44BE,00 00 00 ...
254480,0:04.201.921.200,50 ns,,,ACK,,
254499,0:04.202.036.466,83 ns,,,,,[1 SOF]

So we suspect that the concurrent 1.1/2.0 transfer within Linux causes us the problems as either the USB (ICH4-I82801) chipset
underneath or either the USB2VGA does not tolerate this issue. Have tried the issue on both 2.6.18.8 (OpenSuse 10.2) and on
2.6.34.12 (OpenSuse 11.3)- no luck either, concurrency is still there.

Do you have any idea whether:

a.) is there any current flag in the Linux kernel (CONFIG_*) to disable this concurrency of transfers?

b.) do you have any suggestion where should we look at within the kernel code to try to disable this parallelization?
Would guess for 'urb_enqueue', but not sure.

Thanks,

Tibor Harsszegi


--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux