From owner-freebsd-current@FreeBSD.ORG Thu Jul 1 08:58:58 2004 Return-Path: Delivered-To: freebsd-current@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 4037316A4CE for ; Thu, 1 Jul 2004 08:58:58 +0000 (GMT) Received: from thingy.tbd.co.nz (thingy.tbd.co.nz [210.48.70.194]) by mx1.FreeBSD.org (Postfix) with ESMTP id A684D43D1F for ; Thu, 1 Jul 2004 08:58:57 +0000 (GMT) (envelope-from thompsa@thingy.tbd.co.nz) Received: from thingy.tbd.co.nz (localhost [127.0.0.1])i618xGhg011964 for ; Thu, 1 Jul 2004 20:59:16 +1200 Received: (from thompsa@localhost) by thingy.tbd.co.nz (8.12.3/8.12.3/Debian-6.6) id i618xF67011962 for current@freebsd.org; Thu, 1 Jul 2004 20:59:15 +1200 Date: Thu, 1 Jul 2004 20:59:15 +1200 From: Andrew Thompson To: current@freebsd.org Message-ID: <20040701085915.GA10650@thingy.tbd.co.nz> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline User-Agent: Mutt/1.3.28i Subject: axe0: read PHY failed X-BeenThere: freebsd-current@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: Discussions about the use of FreeBSD-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 01 Jul 2004 08:58:58 -0000 Hi, I have a Netgear FA120 (if_axe) which is causing me greif. After doing moderate network traffic it will stop responding with oodles of "axe0: read PHY failed" on the console. A cvsup triggers it quite reliably. On further analysis I found that it will not send any ethernet frame where the size % 64 == 0 For instance all of the following will timeout ping -s 22 ping -s 86 ping -s 150 etc... Comparing to the NetBSD driver, I added the USBD_FORCE_SHORT_XFER flag and now it is working perfectly. Can someone please review the patch below and commit if appropriate. thanks, Andrew --- sys/dev/usb/if_axe.c Thu Jun 10 02:34:03 2004 +++ sys/dev/usb/if_axe.c Thu Jul 1 20:31:57 2004 @@ -808,7 +808,8 @@ c->axe_mbuf = m; usbd_setup_xfer(c->axe_xfer, sc->axe_ep[AXE_ENDPT_TX], - c, c->axe_buf, m->m_pkthdr.len, 0, 10000, axe_txeof); + c, c->axe_buf, m->m_pkthdr.len, USBD_FORCE_SHORT_XFER, + 10000, axe_txeof); /* Transmit */ err = usbd_transfer(c->axe_xfer);