summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbrad <brad@openbsd.org>2015-02-10 23:22:39 +0000
committerbrad <brad@openbsd.org>2015-02-10 23:22:39 +0000
commitd324af8cd54880cb363537bb0958fc60e4ab0e92 (patch)
tree30fcf4a24a1525d612dc23ed163f31b90675b8fd
parentWhitespace. (diff)
downloadwireguard-openbsd-d324af8cd54880cb363537bb0958fc60e4ab0e92.tar.xz
wireguard-openbsd-d324af8cd54880cb363537bb0958fc60e4ab0e92.zip
Replace hand rolled code with m_defrag().
ok pelikan@
-rw-r--r--sys/dev/pci/if_vic.c34
1 files changed, 8 insertions, 26 deletions
diff --git a/sys/dev/pci/if_vic.c b/sys/dev/pci/if_vic.c
index e89b0b29254..bbec00f7198 100644
--- a/sys/dev/pci/if_vic.c
+++ b/sys/dev/pci/if_vic.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_vic.c,v 1.84 2015/02/10 02:57:32 pelikan Exp $ */
+/* $OpenBSD: if_vic.c,v 1.85 2015/02/10 23:22:39 brad Exp $ */
/*
* Copyright (c) 2006 Reyk Floeter <reyk@openbsd.org>
@@ -1132,7 +1132,6 @@ int
vic_load_txb(struct vic_softc *sc, struct vic_txbuf *txb, struct mbuf *m)
{
bus_dmamap_t dmap = txb->txb_dmamap;
- struct mbuf *m0 = NULL;
int error;
error = bus_dmamap_load_mbuf(sc->sc_dmat, dmap, m, BUS_DMA_NOWAIT);
@@ -1141,33 +1140,16 @@ vic_load_txb(struct vic_softc *sc, struct vic_txbuf *txb, struct mbuf *m)
txb->txb_m = m;
break;
- case EFBIG: /* mbuf chain is too fragmented */
- MGETHDR(m0, M_DONTWAIT, MT_DATA);
- if (m0 == NULL)
- return (ENOBUFS);
- if (m->m_pkthdr.len > MHLEN) {
- MCLGETI(m0, M_DONTWAIT, NULL, m->m_pkthdr.len);
- if (!(m0->m_flags & M_EXT)) {
- m_freem(m0);
- return (ENOBUFS);
- }
- }
- m_copydata(m, 0, m->m_pkthdr.len, mtod(m0, caddr_t));
- m0->m_pkthdr.len = m0->m_len = m->m_pkthdr.len;
- error = bus_dmamap_load_mbuf(sc->sc_dmat, dmap, m0,
- BUS_DMA_NOWAIT);
- if (error != 0) {
- m_freem(m0);
- printf("%s: tx dmamap load error %d\n", DEVNAME(sc),
- error);
- return (ENOBUFS);
+ case EFBIG:
+ if (m_defrag(m, M_DONTWAIT) == 0 &&
+ bus_dmamap_load_mbuf(sc->sc_dmat, dmap, m,
+ BUS_DMA_NOWAIT) == 0) {
+ txb->txb_m = m;
+ break;
}
- m_freem(m);
- txb->txb_m = m0;
- break;
+ /* FALLTHROUGH */
default:
- printf("%s: tx dmamap load error %d\n", DEVNAME(sc), error);
return (ENOBUFS);
}