svn commit: r184911 - user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb

Kip Macy kmacy at FreeBSD.org
Wed Nov 12 21:31:38 PST 2008


Author: kmacy
Date: Thu Nov 13 05:31:37 2008
New Revision: 184911
URL: http://svn.freebsd.org/changeset/base/184911

Log:
  lock buf ring on dequeue

Modified:
  user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_osdep.h

Modified: user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_osdep.h
==============================================================================
--- user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_osdep.h	Thu Nov 13 05:28:42 2008	(r184910)
+++ user/kmacy/HEAD_fast_multi_xmit/sys/dev/cxgb/cxgb_osdep.h	Thu Nov 13 05:31:37 2008	(r184911)
@@ -228,7 +228,7 @@ buf_ring_full(struct buf_ring *mr)
  *
  */
 static __inline void *
-buf_ring_dequeue(struct buf_ring *mr)
+__buf_ring_dequeue(struct buf_ring *mr)
 {
 	uint32_t prod, cons, mask;
 	caddr_t *ring, m;
@@ -236,19 +236,28 @@ buf_ring_dequeue(struct buf_ring *mr)
 	ring = (caddr_t *)mr->br_ring;
 	mask = mr->br_size - 1;
 	cons = mr->br_cons;
-	mb();
 	prod = mr->br_prod;
 	m = NULL;
 	if (cons != prod) {
 		m = ring[cons];
 		ring[cons] = NULL;
 		mr->br_cons = (cons + 1) & mask;
-		mb();
 	}
 	return (m);
 }
 
-#ifdef DEBUG_BUFRING
+static __inline void *
+buf_ring_dequeue(struct buf_ring *mr)
+{
+	void *buf;
+	
+	mtx_lock(&mr->br_lock);
+	buf = __buf_ring_dequeue(mr);
+	mtx_unlock(&mr->br_lock);
+	return (buf);
+}
+	
+#ifdef INVARIANT_SUPPORT
 static __inline void
 __buf_ring_scan(struct buf_ring *mr, void *m, char *file, int line)
 {


More information about the svn-src-user mailing list