svn commit: r229108 - stable/9/sys/dev/usb/wlan
Hans Petter Selasky
hselasky at FreeBSD.org
Sat Dec 31 14:54:30 UTC 2011
Author: hselasky
Date: Sat Dec 31 14:54:30 2011
New Revision: 229108
URL: http://svn.freebsd.org/changeset/base/229108
Log:
MFC r228494, r228508:
Fix for random USB transfer time out.
Modified:
stable/9/sys/dev/usb/wlan/if_run.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/amd64/include/xen/ (props changed)
stable/9/sys/boot/ (props changed)
stable/9/sys/boot/i386/efi/ (props changed)
stable/9/sys/boot/ia64/efi/ (props changed)
stable/9/sys/boot/ia64/ski/ (props changed)
stable/9/sys/boot/powerpc/boot1.chrp/ (props changed)
stable/9/sys/boot/powerpc/ofw/ (props changed)
stable/9/sys/cddl/contrib/opensolaris/ (props changed)
stable/9/sys/conf/ (props changed)
stable/9/sys/contrib/dev/acpica/ (props changed)
stable/9/sys/contrib/octeon-sdk/ (props changed)
stable/9/sys/contrib/pf/ (props changed)
stable/9/sys/contrib/x86emu/ (props changed)
Modified: stable/9/sys/dev/usb/wlan/if_run.c
==============================================================================
--- stable/9/sys/dev/usb/wlan/if_run.c Sat Dec 31 14:50:38 2011 (r229107)
+++ stable/9/sys/dev/usb/wlan/if_run.c Sat Dec 31 14:54:30 2011 (r229108)
@@ -2718,7 +2718,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;
@@ -2748,7 +2747,8 @@ tr_setup:
STAILQ_REMOVE_HEAD(&pq->tx_qh, next);
m = data->m;
- if (m->m_pkthdr.len > RUN_MAX_TXSZ) {
+ if ((m->m_pkthdr.len +
+ sizeof(data->desc) + 3 + 8) > RUN_MAX_TXSZ) {
DPRINTF("data overflow, %u bytes\n",
m->m_pkthdr.len);
@@ -2763,6 +2763,14 @@ tr_setup:
size = sizeof(data->desc);
usbd_copy_in(pc, 0, &data->desc, size);
usbd_m_copy_in(pc, size, m, 0, m->m_pkthdr.len);
+ size += m->m_pkthdr.len;
+ /*
+ * Align end on a 4-byte boundary, pad 8 bytes (CRC +
+ * 4-byte padding), and be sure to zero those trailing
+ * bytes:
+ */
+ usbd_frame_zero(pc, size, ((-size) & 3) + 8);
+ size += ((-size) & 3) + 8;
vap = data->ni->ni_vap;
if (ieee80211_radiotap_active_vap(vap)) {
@@ -2781,13 +2789,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 xferlen=%u @ index %d\n",
- m->m_pkthdr.len, len, index);
+ DPRINTFN(11, "sending frame len=%u/%u @ index %d\n",
+ m->m_pkthdr.len, size, index);
- usbd_xfer_set_frame_len(xfer, 0, len);
+ usbd_xfer_set_frame_len(xfer, 0, size);
usbd_xfer_set_priv(xfer, data);
usbd_transfer_submit(xfer);
More information about the svn-src-stable-9
mailing list