svn commit: r193250 - head/sys/dev/mxge
Andrew Gallatin
gallatin at FreeBSD.org
Mon Jun 1 19:16:59 UTC 2009
Author: gallatin
Date: Mon Jun 1 19:16:57 2009
New Revision: 193250
URL: http://svn.freebsd.org/changeset/base/193250
Log:
Set an rx jumbo cluster to the correct size before
using bus_dmamap_load_mbuf_sg() on it. This
prevents data corruption when the mxge MTU is
between 4076 and 8172 on machines with 4KB
pages and MXGE_VIRT_JUMBOS is in use (which it
isn't, in -current or -stable)
Modified:
head/sys/dev/mxge/if_mxge.c
head/sys/dev/mxge/if_mxge_var.h
Modified: head/sys/dev/mxge/if_mxge.c
==============================================================================
--- head/sys/dev/mxge/if_mxge.c Mon Jun 1 19:16:31 2009 (r193249)
+++ head/sys/dev/mxge/if_mxge.c Mon Jun 1 19:16:57 2009 (r193250)
@@ -2351,7 +2351,7 @@ mxge_get_buf_big(struct mxge_slice_state
err = ENOBUFS;
goto done;
}
- m->m_len = rx->cl_size;
+ m->m_len = rx->mlen;
err = bus_dmamap_load_mbuf_sg(rx->dmat, map, m,
seg, &cnt, BUS_DMA_NOWAIT);
if (err != 0) {
@@ -3432,6 +3432,8 @@ mxge_slice_open(struct mxge_slice_state
}
ss->rx_big.nbufs = nbufs;
ss->rx_big.cl_size = cl_size;
+ ss->rx_big.mlen = ss->sc->ifp->if_mtu + ETHER_HDR_LEN +
+ ETHER_VLAN_ENCAP_LEN + MXGEFW_PAD;
for (i = 0; i <= ss->rx_big.mask; i += ss->rx_big.nbufs) {
map = ss->rx_big.info[i].map;
err = mxge_get_buf_big(ss, map, i);
Modified: head/sys/dev/mxge/if_mxge_var.h
==============================================================================
--- head/sys/dev/mxge/if_mxge_var.h Mon Jun 1 19:16:31 2009 (r193249)
+++ head/sys/dev/mxge/if_mxge_var.h Mon Jun 1 19:16:57 2009 (r193250)
@@ -120,6 +120,7 @@ typedef struct
int cl_size;
int alloc_fail;
int mask; /* number of rx slots -1 */
+ int mlen;
} mxge_rx_ring_t;
typedef struct
More information about the svn-src-all
mailing list