Message ID | 4BC7D75D.9020302@cisco.com |
---|---|
State | New |
Headers | show |
David S. Ahern wrote: > 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. > 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
diff --git a/hw/usb-ehci.c b/hw/usb-ehci.c index f806a20..218d590 100644 --- a/hw/usb-ehci.c +++ b/hw/usb-ehci.c @@ -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; }