From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1O2c6D-00031V-MO for qemu-devel@nongnu.org; Thu, 15 Apr 2010 23:20:09 -0400 Received: from [140.186.70.92] (port=47365 helo=eggs.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1O2c68-0002zF-1J for qemu-devel@nongnu.org; Thu, 15 Apr 2010 23:20:09 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.69) (envelope-from ) id 1O2c66-00075S-9P for qemu-devel@nongnu.org; Thu, 15 Apr 2010 23:20:03 -0400 Received: from sj-iport-6.cisco.com ([171.71.176.117]:65506) by eggs.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1O2c66-00072i-3y for qemu-devel@nongnu.org; Thu, 15 Apr 2010 23:20:02 -0400 Message-ID: <4BC7D75D.9020302@cisco.com> Date: Thu, 15 Apr 2010 21:19:57 -0600 From: "David S. Ahern" MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="------------090901050306070906000405" Subject: [Qemu-devel] [PATCH] ehci: fix infinite loop with usb netdevice List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jan Kiszka Cc: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------090901050306070906000405 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit 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 --------------090901050306070906000405 Content-Type: text/plain; name="ehci-netdev.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="ehci-netdev.patch" 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; } --------------090901050306070906000405--