svn commit: r193670 - in user/kmacy/releng_7_2_fcs/sys: net sys

Kip Macy kmacy at FreeBSD.org
Sun Jun 7 23:49:17 UTC 2009


Author: kmacy
Date: Sun Jun  7 23:49:15 2009
New Revision: 193670
URL: http://svn.freebsd.org/changeset/base/193670

Log:
  track bytes and buffers enqueued in buf_ring

Modified:
  user/kmacy/releng_7_2_fcs/sys/net/if_var.h
  user/kmacy/releng_7_2_fcs/sys/sys/buf_ring.h

Modified: user/kmacy/releng_7_2_fcs/sys/net/if_var.h
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/net/if_var.h	Sun Jun  7 23:47:06 2009	(r193669)
+++ user/kmacy/releng_7_2_fcs/sys/net/if_var.h	Sun Jun  7 23:49:15 2009	(r193670)
@@ -559,8 +559,9 @@ do {									\
 static __inline void
 drbr_stats_update(struct ifnet *ifp, int len, int mflags)
 {
-
+#ifndef NO_SLOW_STATS
 	ifp->if_obytes += len;
+#endif	
 	if (mflags & M_MCAST)
 		ifp->if_omcasts++;
 }
@@ -578,13 +579,12 @@ drbr_enqueue(struct ifnet *ifp, struct b
 		return (error);
 	}
 #endif
-	if ((error = buf_ring_enqueue(br, m)) == ENOBUFS) {
+	if ((error = buf_ring_enqueue(br, m, m->m_pkthdr.len)) == ENOBUFS) {
 		br->br_drops++;
-		_IF_DROP(&ifp->if_snd);
 		m_freem(m);
 	} else
 		drbr_stats_update(ifp, len, mflags);
-	
+
 	return (error);
 }
 

Modified: user/kmacy/releng_7_2_fcs/sys/sys/buf_ring.h
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/sys/buf_ring.h	Sun Jun  7 23:47:06 2009	(r193669)
+++ user/kmacy/releng_7_2_fcs/sys/sys/buf_ring.h	Sun Jun  7 23:49:15 2009	(r193670)
@@ -49,10 +49,12 @@ struct buf_ring {
 	int              	br_prod_size;
 	int              	br_prod_mask;
 	uint64_t		br_drops;
+	uint64_t		br_prod_bufs;
+	uint64_t		br_prod_bytes;
 	/*
 	 * Pad out to next L2 cache line
 	 */
-	uint64_t	  	_pad0[13];
+	uint64_t	  	_pad0[11];
 
 	volatile uint32_t	br_cons_head;
 	volatile uint32_t	br_cons_tail;
@@ -74,7 +76,7 @@ struct buf_ring {
  *
  */
 static __inline int
-buf_ring_enqueue(struct buf_ring *br, void *buf)
+buf_ring_enqueue(struct buf_ring *br, void *buf, int nbytes)
 {
 	uint32_t prod_head, prod_next;
 	uint32_t cons_tail;
@@ -116,6 +118,8 @@ buf_ring_enqueue(struct buf_ring *br, vo
 	 */   
 	while (br->br_prod_tail != prod_head)
 		cpu_spinwait();
+	br->br_prod_bufs++;
+	br->br_prod_bytes += nbytes;
 	br->br_prod_tail = prod_next;
 	critical_exit();
 	return (0);


More information about the svn-src-user mailing list