On Tue, 27 Sep 2022, Hans Petter Selasky wrote:
On 9/27/22 02:24, Alexander Motin wrote:
On 26.09.2022 17:29, Hans Petter Selasky wrote:
I've got a supposedly "broken" if_ure dongle from Alexander, but I'm
unable to reproduce the if_ure hang on two different pieces of XHCI
hardware, Intel based and AMD based, which I've got.
This leads me to believe there is a bug in the XHCI driver or hardware on
your system.
Can you share the pciconfig -lv output for your XHCI controllers?
I have two laptops of different generations reproducing this problem, but
both are having Thunderbolt on the USB-C ports:
This is one (7th Gen Core i7):
xhci1@pci0:56:0:0: class=0x0c0330 rev=0x02 hdr=0x00 vendor=0x8086
device=0x15d4 subvendor=0x2222 subdevice=0x1111
vendor = 'Intel Corporation'
device = 'JHL6540 Thunderbolt 3 USB Controller (C step) [Alpine
Ridge 4C 2016]'
class = serial bus
subclass = USB
bar [10] = type Memory, range 32, base 0xc3f00000, size 65536,
enabled
cap 01[80] = powerspec 3 supports D0 D1 D2 D3 current D0
cap 05[88] = MSI supports 8 messages, 64 bit enabled with 1 message
cap 10[c0] = PCI-Express 2 endpoint max data 128(128) RO NS
max read 512
link x4(x4) speed 2.5(2.5) ASPM disabled(L0s/L1) ClockPM
disabled
ecap 0003[100] = Serial 1 20ff910876f10c00
ecap 0001[200] = AER 1 0 fatal 0 non-fatal 1 corrected
ecap 0002[300] = VC 1 max VC0
ecap 0004[400] = Power Budgeting 1
ecap 000b[500] = Vendor [1] ID 1234 Rev 1 Length 216
ecap 0018[600] = LTR 1
ecap 0019[700] = PCIe Sec 1 lane errors 0
This is another (11th Gen Core i7);
xhci0@pci0:0:13:0: class=0x0c0330 rev=0x01 hdr=0x00 vendor=0x8086
device=0x9a13 subvendor=0x1028 subdevice=0x0991
vendor = 'Intel Corporation'
device = 'Tiger Lake-LP Thunderbolt 4 USB Controller'
class = serial bus
subclass = USB
bar [10] = type Memory, range 64, base 0x60552c0000, size 65536,
enabled
cap 01[70] = powerspec 2 supports D0 D3 current D0
cap 05[80] = MSI supports 8 messages, 64 bit enabled with 1 message
cap 09[90] = vendor (length 20) Intel cap 15 version 0
cap 09[b0] = vendor (length 0) Intel cap 0 version 1
Does the system you also has Thunderbolt chip, or you use native Intel
chipet's XHCI?
Also, when running the stress test and you see the traffic stops, what
happens if you run this command as root on the ugen which the if_ure
belongs to:
usbconfig -d ugenX.Y dump_string 0
Does the traffic resume?
Nope. Out of 4 times when traffic stopped 2 times it reported <read error>
and 2 times it completed successfully, but it neither case it recovered
traffic. Only reset recovered it.
Hi Alexander,
Could you run "usbdump -d X.Y" at the same time to capture all the errors?
Looking especially for USB_ERR_TIMEOUT .
I have this:
xhci0@pci0:3:0:3: class=0x0c0330 rev=0x00 hdr=0x00 vendor=0x1022
device=0x15e0 subvendor=0x1849 subdevice=0xffff
vendor = 'Advanced Micro Devices, Inc. [AMD]'
device = 'Raven USB 3.1'
class = serial bus
subclass = USB
xhci0@pci0:0:20:0: class=0x0c0330 rev=0x21 hdr=0x00 vendor=0x8086
device=0x9d2f subvendor=0x8086 subdevice=0x9d2f
vendor = 'Intel Corporation'
device = 'Sunrise Point-LP USB 3.0 xHCI Controller'
class = serial bus
subclass = USB
--HPS
hi Hans
i think i got some good logs for you
before the problem i ran this:
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
# usbconfig -d ugen0.10 >> before
# usbconfig -d ugen0.10 dump_all_desc >> before
# usbconfig -d ugen0.10 dump_stats >> before_status
the after the problem happened i ran
# usbconfig -d ugen0.10 >> after
# usbconfig -d ugen0.10 dump_all_desc >> after
# usbconfig -d ugen0.10 dump_stats >> after_status
just by looking i already see some problems comparing both
for example
before the problem we have:
----------------------
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0300
bDeviceClass = 0x0000 <Probed by interface class>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0000
bMaxPacketSize0 = 0x0009
idVendor = 0x2357
idProduct = 0x0601
bcdDevice = 0x3000
****
iManufacturer = 0x0001 <TP-Link>
iProduct = 0x0002 <USB 10/100/1000 LAN>
iSerialNumber = 0x0006 <000001>
bNumConfigurations = 0x0002
------------------------
after the problem
--------------------------
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0300
bDeviceClass = 0x0000 <Probed by interface class>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0000
bMaxPacketSize0 = 0x0009
idVendor = 0x2357
idProduct = 0x0601
bcdDevice = 0x3000
****
iManufacturer = 0x0001 <retrieving string failed>
iProduct = 0x0002 <retrieving string failed>
iSerialNumber = 0x0006 <retrieving string failed>
bNumConfigurations = 0x0002
Configuration index 0
--------------------------
the log in ttyv0 was this:
ure0: at uhub0, port 14, addr 9 (disconnected)
Sep 27 08:55:58 tzk-inspiron dhclient[1201]: receive_packet failed on ue0:
Device not configured
Sep 27 08:55:58 tzk-inspiron dhclient[1201]: ioctl(SIOCGIFFLAGS) on ue0:
Operation not permitted
Sep 27 08:55:58 tzk-inspiron dhclient[1201]: Interface ue0 no longer appears
valid.
Sep 27 08:55:58 tzk-inspiron dhclient[1201]: No live interfaces to poll on -
exiting.
Sep 27 08:55:58 tzk-inspiron dhclient[1201]: exiting.
Sep 27 08:55:58 tzk-inspiron dhclient[1201]: connection closed
Sep 27 08:55:58 tzk-inspiron dhclient[1201]: exiting.
rgephy0: detached
miibus0: detached
ure0: detached
difference between before_status and after_status
before_status:
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
{
UE_CONTROL_OK : 2389
UE_ISOCHRONOUS_OK : 0
UE_BULK_OK : 803
UE_INTERRUPT_OK : 0
UE_CONTROL_FAIL : 0
UE_ISOCHRONOUS_FAIL : 0
UE_BULK_FAIL : 0
UE_INTERRUPT_FAIL : 0
}
after_status:
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
{
UE_CONTROL_OK : 4275
UE_ISOCHRONOUS_OK : 0
UE_BULK_OK : 1126702
UE_INTERRUPT_OK : 0
UE_CONTROL_FAIL : 326
UE_ISOCHRONOUS_FAIL : 0
UE_BULK_FAIL : 42
UE_INTERRUPT_FAIL : 0
}
i hope that helps
all log files are attached
thanks
--tzk
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0300
bDeviceClass = 0x0000 <Probed by interface class>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0000
bMaxPacketSize0 = 0x0009
idVendor = 0x2357
idProduct = 0x0601
bcdDevice = 0x3000
iManufacturer = 0x0001 <retrieving string failed>
iProduct = 0x0002 <retrieving string failed>
iSerialNumber = 0x0006 <retrieving string failed>
bNumConfigurations = 0x0002
Configuration index 0
bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x0039
bNumInterfaces = 0x0001
bConfigurationValue = 0x0001
iConfiguration = 0x0000 <no string>
bmAttributes = 0x00a0
bMaxPower = 0x0024
Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0003
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x00ff
bInterfaceProtocol = 0x0000
iInterface = 0x0000 <no string>
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0081 <IN>
bmAttributes = 0x0002 <BULK>
wMaxPacketSize = 0x0400
bInterval = 0x0000
bRefresh = 0x0000
bSynchAddress = 0x0000
Additional Descriptor
bLength = 0x06
bDescriptorType = 0x30
bDescriptorSubType = 0x03
RAW dump:
0x00 | 0x06, 0x30, 0x03, 0x00, 0x00, 0x00
Endpoint 1
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0002 <OUT>
bmAttributes = 0x0002 <BULK>
wMaxPacketSize = 0x0400
bInterval = 0x0000
bRefresh = 0x0000
bSynchAddress = 0x0000
Additional Descriptor
bLength = 0x06
bDescriptorType = 0x30
bDescriptorSubType = 0x03
RAW dump:
0x00 | 0x06, 0x30, 0x03, 0x00, 0x00, 0x00
Endpoint 2
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0083 <IN>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x0002
bInterval = 0x0008
bRefresh = 0x0000
bSynchAddress = 0x0000
Additional Descriptor
bLength = 0x06
bDescriptorType = 0x30
bDescriptorSubType = 0x00
RAW dump:
0x00 | 0x06, 0x30, 0x00, 0x00, 0x02, 0x00
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
{
UE_CONTROL_OK : 4275
UE_ISOCHRONOUS_OK : 0
UE_BULK_OK : 1126702
UE_INTERRUPT_OK : 0
UE_CONTROL_FAIL : 326
UE_ISOCHRONOUS_FAIL : 0
UE_BULK_FAIL : 42
UE_INTERRUPT_FAIL : 0
}
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
bLength = 0x0012
bDescriptorType = 0x0001
bcdUSB = 0x0300
bDeviceClass = 0x0000 <Probed by interface class>
bDeviceSubClass = 0x0000
bDeviceProtocol = 0x0000
bMaxPacketSize0 = 0x0009
idVendor = 0x2357
idProduct = 0x0601
bcdDevice = 0x3000
iManufacturer = 0x0001 <TP-Link>
iProduct = 0x0002 <USB 10/100/1000 LAN>
iSerialNumber = 0x0006 <000001>
bNumConfigurations = 0x0002
Configuration index 0
bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x0039
bNumInterfaces = 0x0001
bConfigurationValue = 0x0001
iConfiguration = 0x0000 <no string>
bmAttributes = 0x00a0
bMaxPower = 0x0024
Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0003
bInterfaceClass = 0x00ff <Vendor specific>
bInterfaceSubClass = 0x00ff
bInterfaceProtocol = 0x0000
iInterface = 0x0000 <no string>
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0081 <IN>
bmAttributes = 0x0002 <BULK>
wMaxPacketSize = 0x0400
bInterval = 0x0000
bRefresh = 0x0000
bSynchAddress = 0x0000
Additional Descriptor
bLength = 0x06
bDescriptorType = 0x30
bDescriptorSubType = 0x03
RAW dump:
0x00 | 0x06, 0x30, 0x03, 0x00, 0x00, 0x00
Endpoint 1
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0002 <OUT>
bmAttributes = 0x0002 <BULK>
wMaxPacketSize = 0x0400
bInterval = 0x0000
bRefresh = 0x0000
bSynchAddress = 0x0000
Additional Descriptor
bLength = 0x06
bDescriptorType = 0x30
bDescriptorSubType = 0x03
RAW dump:
0x00 | 0x06, 0x30, 0x03, 0x00, 0x00, 0x00
Endpoint 2
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0083 <IN>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x0002
bInterval = 0x0008
bRefresh = 0x0000
bSynchAddress = 0x0000
Additional Descriptor
bLength = 0x06
bDescriptorType = 0x30
bDescriptorSubType = 0x00
RAW dump:
0x00 | 0x06, 0x30, 0x00, 0x00, 0x02, 0x00
Configuration index 1
bLength = 0x0009
bDescriptorType = 0x0002
wTotalLength = 0x0062
bNumInterfaces = 0x0002
bConfigurationValue = 0x0002
iConfiguration = 0x0000 <no string>
bmAttributes = 0x00a0
bMaxPower = 0x0024
Interface 0
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0000
bAlternateSetting = 0x0000
bNumEndpoints = 0x0001
bInterfaceClass = 0x0002 <Communication device>
bInterfaceSubClass = 0x0006
bInterfaceProtocol = 0x0000
iInterface = 0x0005 <CDC Communications Control>
Additional Descriptor
bLength = 0x05
bDescriptorType = 0x24
bDescriptorSubType = 0x00
RAW dump:
0x00 | 0x05, 0x24, 0x00, 0x10, 0x01
Additional Descriptor
bLength = 0x05
bDescriptorType = 0x24
bDescriptorSubType = 0x06
RAW dump:
0x00 | 0x05, 0x24, 0x06, 0x00, 0x01
Additional Descriptor
bLength = 0x0d
bDescriptorType = 0x24
bDescriptorSubType = 0x0f
RAW dump:
0x00 | 0x0d, 0x24, 0x0f, 0x03, 0x00, 0x00, 0x00, 0x00,
0x08 | 0xea, 0x05, 0x00, 0x00, 0x00
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0083 <IN>
bmAttributes = 0x0003 <INTERRUPT>
wMaxPacketSize = 0x0010
bInterval = 0x0008
bRefresh = 0x0000
bSynchAddress = 0x0000
Additional Descriptor
bLength = 0x06
bDescriptorType = 0x30
bDescriptorSubType = 0x00
RAW dump:
0x00 | 0x06, 0x30, 0x00, 0x00, 0x08, 0x00
Interface 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0000
bNumEndpoints = 0x0000
bInterfaceClass = 0x000a <CDC-data>
bInterfaceSubClass = 0x0000
bInterfaceProtocol = 0x0000
iInterface = 0x0000 <no string>
Interface 1 Alt 1
bLength = 0x0009
bDescriptorType = 0x0004
bInterfaceNumber = 0x0001
bAlternateSetting = 0x0001
bNumEndpoints = 0x0002
bInterfaceClass = 0x000a <CDC-data>
bInterfaceSubClass = 0x0000
bInterfaceProtocol = 0x0000
iInterface = 0x0004 <Ethernet Data>
Endpoint 0
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0081 <IN>
bmAttributes = 0x0002 <BULK>
wMaxPacketSize = 0x0400
bInterval = 0x0000
bRefresh = 0x0000
bSynchAddress = 0x0000
Additional Descriptor
bLength = 0x06
bDescriptorType = 0x30
bDescriptorSubType = 0x03
RAW dump:
0x00 | 0x06, 0x30, 0x03, 0x00, 0x00, 0x00
Endpoint 1
bLength = 0x0007
bDescriptorType = 0x0005
bEndpointAddress = 0x0002 <OUT>
bmAttributes = 0x0002 <BULK>
wMaxPacketSize = 0x0400
bInterval = 0x0000
bRefresh = 0x0000
bSynchAddress = 0x0000
Additional Descriptor
bLength = 0x06
bDescriptorType = 0x30
bDescriptorSubType = 0x03
RAW dump:
0x00 | 0x06, 0x30, 0x03, 0x00, 0x00, 0x00
ugen0.10: <TP-Link USB 10/100/1000 LAN> at usbus0, cfg=0 md=HOST spd=SUPER
(5.0Gbps) pwr=ON (72mA)
{
UE_CONTROL_OK : 2389
UE_ISOCHRONOUS_OK : 0
UE_BULK_OK : 803
UE_INTERRUPT_OK : 0
UE_CONTROL_FAIL : 0
UE_ISOCHRONOUS_FAIL : 0
UE_BULK_FAIL : 0
UE_INTERRUPT_FAIL : 0
}