Don't call m_aux_find() in the inner loop when creating the Tx
descriptor list. Instead, call it once and remember the result, and only call it looking for VLAN tags if VLANs are configured on the interface.
This commit is contained in:
parent
b55257ed7e
commit
b7af161065
@ -1,4 +1,4 @@
|
|||||||
/* $NetBSD: if_bge.c,v 1.5 2002/06/27 22:31:30 thorpej Exp $ */
|
/* $NetBSD: if_bge.c,v 1.6 2002/06/27 23:21:34 thorpej Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2001 Wind River Systems
|
* Copyright (c) 2001 Wind River Systems
|
||||||
* Copyright (c) 1997, 1998, 1999, 2001
|
* Copyright (c) 1997, 1998, 1999, 2001
|
||||||
@ -2349,6 +2349,9 @@ bge_encap(sc, m_head, txidx)
|
|||||||
BUS_DMA_NOWAIT))
|
BUS_DMA_NOWAIT))
|
||||||
return(ENOBUFS);
|
return(ENOBUFS);
|
||||||
|
|
||||||
|
n = sc->ethercom.ec_nvlans ?
|
||||||
|
m_aux_find(m_head, AF_LINK, ETHERTYPE_VLAN) : NULL;
|
||||||
|
|
||||||
for (i = 0; i < dmamap->dm_nsegs; i++) {
|
for (i = 0; i < dmamap->dm_nsegs; i++) {
|
||||||
f = &sc->bge_rdata->bge_tx_ring[frag];
|
f = &sc->bge_rdata->bge_tx_ring[frag];
|
||||||
if (sc->bge_cdata.bge_tx_chain[frag] != NULL)
|
if (sc->bge_cdata.bge_tx_chain[frag] != NULL)
|
||||||
@ -2357,7 +2360,6 @@ bge_encap(sc, m_head, txidx)
|
|||||||
f->bge_len = dmamap->dm_segs[i].ds_len;
|
f->bge_len = dmamap->dm_segs[i].ds_len;
|
||||||
f->bge_flags = csum_flags;
|
f->bge_flags = csum_flags;
|
||||||
|
|
||||||
n = m_aux_find(m_head, AF_LINK, ETHERTYPE_VLAN);
|
|
||||||
if (n != NULL) {
|
if (n != NULL) {
|
||||||
f->bge_flags |= BGE_TXBDFLAG_VLAN_TAG;
|
f->bge_flags |= BGE_TXBDFLAG_VLAN_TAG;
|
||||||
f->bge_vlan_tag = *mtod(n, int *);
|
f->bge_vlan_tag = *mtod(n, int *);
|
||||||
|
Loading…
Reference in New Issue
Block a user