From owner-svn-src-head@FreeBSD.ORG Wed Dec 14 08:52:28 2011 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 1829D106564A; Wed, 14 Dec 2011 08:52:28 +0000 (UTC) (envelope-from hselasky@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id E09C98FC12; Wed, 14 Dec 2011 08:52:27 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pBE8qRG9090086; Wed, 14 Dec 2011 08:52:27 GMT (envelope-from hselasky@svn.freebsd.org) Received: (from hselasky@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pBE8qReF090084; Wed, 14 Dec 2011 08:52:27 GMT (envelope-from hselasky@svn.freebsd.org) Message-Id: <201112140852.pBE8qReF090084@svn.freebsd.org> From: Hans Petter Selasky Date: Wed, 14 Dec 2011 08:52:27 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r228494 - head/sys/dev/usb/wlan X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 14 Dec 2011 08:52:28 -0000 Author: hselasky Date: Wed Dec 14 08:52:27 2011 New Revision: 228494 URL: http://svn.freebsd.org/changeset/base/228494 Log: Fix for random USB transfer time out. Submitted by: PseudoCylon MFC after: 3 days Modified: head/sys/dev/usb/wlan/if_run.c Modified: head/sys/dev/usb/wlan/if_run.c ============================================================================== --- head/sys/dev/usb/wlan/if_run.c Wed Dec 14 08:44:16 2011 (r228493) +++ head/sys/dev/usb/wlan/if_run.c Wed Dec 14 08:52:27 2011 (r228494) @@ -2720,7 +2720,6 @@ run_bulk_tx_callbackN(struct usb_xfer *x struct run_endpoint_queue *pq = &sc->sc_epq[index]; struct mbuf *m; usb_frlength_t size; - unsigned int len; int actlen; int sumlen; @@ -2783,13 +2782,10 @@ tr_setup: ieee80211_radiotap_tx(vap, m); } - /* align end on a 4-bytes boundary */ - len = (size + IEEE80211_CRC_LEN + m->m_pkthdr.len + 3) & ~3; + DPRINTFN(11, "sending frame len=%u @ index %d\n", + m->m_pkthdr.len, index); - DPRINTFN(11, "sending frame len=%u xferlen=%u @ index %d\n", - m->m_pkthdr.len, len, index); - - usbd_xfer_set_frame_len(xfer, 0, len); + usbd_xfer_set_frame_len(xfer, 0, size + m->m_pkthdr.len); usbd_xfer_set_priv(xfer, data); usbd_transfer_submit(xfer); @@ -2878,6 +2874,7 @@ run_bulk_tx_callback5(struct usb_xfer *x static void run_set_tx_desc(struct run_softc *sc, struct run_tx_data *data) { + static const uint8_t ztail[16]; struct mbuf *m = data->m; struct ieee80211com *ic = sc->sc_ifp->if_l2com; struct ieee80211vap *vap = data->ni->ni_vap; @@ -2934,6 +2931,13 @@ run_set_tx_desc(struct run_softc *sc, st if (vap->iv_opmode != IEEE80211_M_STA && !IEEE80211_QOS_HAS_SEQ(wh)) txwi->xflags |= RT2860_TX_NSEQ; + + /* + * Align end on a 4-byte boundary, pad 8 bytes (CRC + 4-byte padding), + * and be sure to zero those trailing bytes. + */ + m_append(m, ((m->m_pkthdr.len + 3) & ~3) - m->m_pkthdr.len + 8, + (c_caddr_t)ztail); } /* This function must be called locked */