Skip site navigation (1)Skip section navigation (2)
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>