summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordamien <damien@openbsd.org>2006-02-11 09:26:15 +0000
committerdamien <damien@openbsd.org>2006-02-11 09:26:15 +0000
commitf4b8733b6733210c782ec787d4671a651fe1ae50 (patch)
treedb53ebe3c0c50399091a3e2371e74b2125e83554
parentMCP51 boards don't support jumbo frames.. (diff)
downloadwireguard-openbsd-f4b8733b6733210c782ec787d4671a651fe1ae50.tar.xz
wireguard-openbsd-f4b8733b6733210c782ec787d4671a651fe1ae50.zip
don't free the mbuf in nfe_encap() if it can't be DMA'mapped since it is
left in if_snd. prettify nfe_start() a bit while i'm here.
-rw-r--r--sys/dev/pci/if_nfe.c16
1 files changed, 6 insertions, 10 deletions
diff --git a/sys/dev/pci/if_nfe.c b/sys/dev/pci/if_nfe.c
index db4a7e3f8c8..c752c65afd4 100644
--- a/sys/dev/pci/if_nfe.c
+++ b/sys/dev/pci/if_nfe.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: if_nfe.c,v 1.25 2006/02/11 09:18:56 damien Exp $ */
+/* $OpenBSD: if_nfe.c,v 1.26 2006/02/11 09:26:15 damien Exp $ */
/*-
* Copyright (c) 2006 Damien Bergamini <damien.bergamini@free.fr>
@@ -781,25 +781,21 @@ nfe_encap(struct nfe_softc *sc, struct mbuf *m0)
if (error != 0 && error != EFBIG) {
printf("%s: could not map mbuf (error %d)\n",
sc->sc_dev.dv_xname, error);
- m_freem(m0);
return error;
}
if (error != 0) {
/* too many fragments, linearize */
MGETHDR(mnew, M_DONTWAIT, MT_DATA);
- if (mnew == NULL) {
- m_freem(m0);
- return ENOMEM;
- }
+ if (mnew == NULL)
+ return ENOBUFS;
M_DUP_PKTHDR(mnew, m0);
if (m0->m_pkthdr.len > MHLEN) {
MCLGET(mnew, M_DONTWAIT);
if (!(mnew->m_flags & M_EXT)) {
- m_freem(m0);
m_freem(mnew);
- return ENOMEM;
+ return ENOBUFS;
}
}
@@ -893,7 +889,7 @@ nfe_start(struct ifnet *ifp)
{
struct nfe_softc *sc = ifp->if_softc;
struct mbuf *m0;
- uint32_t txctl = NFE_RXTX_KICKTX;
+ uint32_t txctl;
int pkts = 0;
for (;;) {
@@ -918,11 +914,11 @@ nfe_start(struct ifnet *ifp)
if (pkts == 0)
return;
+ txctl = NFE_RXTX_KICKTX;
if (sc->sc_flags & NFE_40BIT_ADDR)
txctl |= NFE_RXTX_V3MAGIC;
else if (sc->sc_flags & NFE_JUMBO_SUP)
txctl |= NFE_RXTX_V2MAGIC;
-
#ifdef NFE_CSUM
if (sc->sc_flags & NFE_HW_CSUM)
txctl |= NFE_RXTX_RXCHECK;