diff options
| author | Brian Feldman <green@FreeBSD.org> | 2004-08-02 00:18:36 +0000 |
|---|---|---|
| committer | Brian Feldman <green@FreeBSD.org> | 2004-08-02 00:18:36 +0000 |
| commit | b23f72e98ae8164c07be4b3780a0b83e094844cf (patch) | |
| tree | ff53102435294d83e0ddcbd011824aa65f84e3c8 /sys/dev/en | |
| parent | 154b8df2ed89bc6ff54310ee54cd720670405ba7 (diff) | |
Notes
Diffstat (limited to 'sys/dev/en')
| -rw-r--r-- | sys/dev/en/midway.c | 33 |
1 files changed, 12 insertions, 21 deletions
diff --git a/sys/dev/en/midway.c b/sys/dev/en/midway.c index 02096b3082cd0..33108381ec810 100644 --- a/sys/dev/en/midway.c +++ b/sys/dev/en/midway.c @@ -437,25 +437,21 @@ en_dump_packet(struct en_softc *sc, struct mbuf *m) * * LOCK: any, not needed */ -static void -en_map_ctor(void *mem, int size, void *arg) +static int +en_map_ctor(void *mem, int size, void *arg, int flags) { struct en_softc *sc = arg; struct en_map *map = mem; int err; - if (map->sc == NULL) - map->sc = sc; - - if (!(map->flags & ENMAP_ALLOC)) { - err = bus_dmamap_create(sc->txtag, 0, &map->map); - if (err != 0) - if_printf(&sc->ifatm.ifnet, - "cannot create DMA map %d\n", err); - else - map->flags |= ENMAP_ALLOC; + err = bus_dmamap_create(sc->txtag, 0, &map->map); + if (err != 0) { + if_printf(&sc->ifatm.ifnet, "cannot create DMA map %d\n", err); + return (err); } - map->flags &= ~ENMAP_LOADED; + map->flags = ENMAP_ALLOC; + map->sc = sc; + return (0); } /* @@ -490,8 +486,7 @@ en_map_fini(void *mem, int size) { struct en_map *map = mem; - if (map->flags & ENMAP_ALLOC) - bus_dmamap_destroy(map->sc->txtag, map->map); + bus_dmamap_destroy(map->sc->txtag, map->map); } /*********************************************************************/ @@ -1041,11 +1036,9 @@ en_start(struct ifnet *ifp) * locks. */ map = uma_zalloc_arg(sc->map_zone, sc, M_NOWAIT); - if (map == NULL || !(map->flags & ENMAP_ALLOC)) { + if (map == NULL) { /* drop that packet */ EN_COUNT(sc->stats.txnomap); - if (map != NULL) - uma_zfree(sc->map_zone, map); EN_UNLOCK(sc); m_freem(m); continue; @@ -2330,13 +2323,11 @@ en_service(struct en_softc *sc) if (m != NULL) { /* M_NOWAIT - called from interrupt context */ map = uma_zalloc_arg(sc->map_zone, sc, M_NOWAIT); - if (map == NULL || !(map->flags & ENMAP_ALLOC)) { + if (map == NULL) { rx.post_skip += mlen; m_freem(m); DBG(sc, SERV, ("rx%td: out of maps", slot - sc->rxslot)); - if (map->map != NULL) - uma_zfree(sc->map_zone, map); goto skip; } rx.m = m; |
