ehci: fix infinite loop with usb netdevice
PATCH 1/1 ehci: fix infinite loop with usb netdevice
Hi Jan:
The attached addresses the spinning with the usb net device. Now I can enable the device and ethtool shows a link:
# ifconfig usb0 up # ethtool usb0 Settings for usb0: Current message level: 0x00000007 (7) Link detected: yes
Though dhclient still can't get an address. After a bit of instrumentation it appears that packets are lost in the receive the path somewhere:
usb0 Link encap:Ethernet HWaddr 42:5F:CA:51:54:77
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:25 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:5513 (5.3 KiB)
I looked at an x3650M2 with an IMM. It has a usb-based ethernet device. I compared the output of lsusb -v from the IMM with the qemu usb net device and nothing jumps out -- other than the fact that the IMM's network device shows up on a uhci bus.
David
hw/usb-ehci.c +4 -2
@@ -981,13 +981,15 @@ err: qh->token |=QTD_TOKEN_HALT ;break ;case USB_RET_NAK : +/* 4.10.3 */ reload =get_field (qh->epchar,QH_EPCHAR_RL );if ((ehci->pid ==USB_TOKEN_IN ) && reload) {int nakcnt =get_field (qh->altnext_qtd,QH_ALTNEXT_NAKCNT ); nakcnt--;set_field (&qh->altnext_qtd, nakcnt,QH_ALTNEXT_NAKCNT ); + }else if (!reload) { +return USB_RET_NAK ; } -return USB_RET_NAK ;break ;case USB_RET_BABBLE :fprintf (stderr,"USB babble TODO\n" );
@@ -1040,7 +1042,7 @@ err: ret += ehci->more; -if (ret > ehci->tbytes) { +if ((ret > ehci->tbytes) && (ehci->pid ==USB_TOKEN_IN )) { ret =USB_RET_BABBLE ; goto err; }
Quoted 22 lines · David S. Ahern
Hi Jan:
The attached addresses the spinning with the usb net device. Now I can enable the device and ethtool shows a link:
# ifconfig usb0 up # ethtool usb0 Settings for usb0: Current message level: 0x00000007 (7) Link detected: yesThough dhclient still can't get an address. After a bit of instrumentation it appears that packets are lost in the receive the path somewhere:
usb0 Link encap:Ethernet HWaddr 42:5F:CA:51:54:77
BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:25 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000
RX bytes:0 (0.0 b) TX bytes:5513 (5.3 KiB)
Quoted 5 lines
I looked at an x3650M2 with an IMM. It has a usb-based ethernet device. I compared the output of lsusb -v from the IMM with the qemu usb net device and nothing jumps out -- other than the fact that the IMM's network device shows up on a uhci bus.
Thanks merged (a git-formatted patch would have been even better :) ).
Yeah, the behavior is as before here as well. So there was or was not USB traffic between device and controller that points to incoming frames? Guess we need to debug through the device if there was.
Jan