Date: Fri, 5 Dec 2008 21:17:19 +0000 (UTC) From: Kip Macy <kmacy@FreeBSD.org> To: src-committers@freebsd.org, svn-src-user@freebsd.org Subject: svn commit: r185650 - user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000 Message-ID: <200812052117.mB5LHJjE073367@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: kmacy Date: Fri Dec 5 21:17:19 2008 New Revision: 185650 URL: http://svn.freebsd.org/changeset/base/185650 Log: - convert to drbr helper functions - free buf_ring on detach - pass mbuf to bpf in direct transmit case pointed out by: Gallatin Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c ============================================================================== --- user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Fri Dec 5 21:16:13 2008 (r185649) +++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/e1000/if_em.c Fri Dec 5 21:17:19 2008 (r185650) @@ -889,6 +889,7 @@ em_detach(device_t dev) em_free_pci_resources(adapter); bus_generic_detach(dev); if_free(ifp); + drbr_free(adapter->br, M_DEVBUF); em_free_transmit_structures(adapter); em_free_receive_structures(adapter); @@ -995,23 +996,22 @@ em_transmit_locked(struct ifnet *ifp, st if (((ifp->if_drv_flags & (IFF_DRV_RUNNING|IFF_DRV_OACTIVE)) != IFF_DRV_RUNNING) || (!adapter->link_active)) { - if ((error = buf_ring_enqueue(adapter->br, m))) - m_freem(m); + error = drbr_enqueue(adapter->br, m); return (error); } if (buf_ring_empty(adapter->br) && (adapter->num_tx_desc_avail > EM_TX_OP_THRESHOLD)) { - if (em_xmit(adapter, &m)) - if (m && (error = buf_ring_enqueue(adapter->br, m)) != 0) { - m_freem(m); + if (em_xmit(adapter, &m)) { + if (m && (error = drbr_enqueue(adapter->br, m)) != 0) { return (error); } - - } else if ((error = buf_ring_enqueue(adapter->br, m)) != 0) { - m_freem(m); + } else{ + /* Send a copy of the frame to the BPF listener */ + ETHER_BPF_MTAP(ifp, m); + } + } else if ((error = drbr_enqueue(adapter->br, m)) != 0) return (error); - } if (!buf_ring_empty(adapter->br)) em_start_locked(ifp); @@ -1122,10 +1122,8 @@ em_transmit(struct ifnet *ifp, struct mb if (ifp->if_drv_flags & IFF_DRV_RUNNING) error = em_transmit_locked(ifp, m); EM_TX_UNLOCK(adapter); - } else { - if ((error = buf_ring_enqueue(adapter->br, m))) - m_freem(m); - } + } else + error = drbr_enqueue(adapter->br, m); return (error); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812052117.mB5LHJjE073367>