socsvn commit: r305707 - soc2016/vincenzo/head/sys/dev/netmap

vincenzo at FreeBSD.org vincenzo at FreeBSD.org
Mon Jul 4 07:42:40 UTC 2016


Author: vincenzo
Date: Mon Jul  4 07:42:39 2016
New Revision: 305707
URL: http://svnweb.FreeBSD.org/socsvn/?view=rev&rev=305707

Log:
   freebsd: introduce PTNET_TX_NOSPACE

Modified:
  soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c

Modified: soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c
==============================================================================
--- soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c	Mon Jul  4 07:42:30 2016	(r305706)
+++ soc2016/vincenzo/head/sys/dev/netmap/if_ptnet.c	Mon Jul  4 07:42:39 2016	(r305707)
@@ -1164,6 +1164,13 @@
 	}
 }
 
+/* This should be computed as MAX_FRAME_SIZE / NETMAP_BUF_SIZE */
+#define PTNET_TX_MIN_SLOTS	33
+
+#define PTNET_TX_NOSPACE(h, k)	\
+	((((h) < (k)->rtail) ? 0 : (k)->nkr_num_slots) + \
+		(k)->rtail - (h)) < PTNET_TX_MIN_SLOTS
+
 static int
 ptnet_transmit(struct ifnet *ifp, struct mbuf *m)
 {
@@ -1221,13 +1228,13 @@
 	head = ring->head;
 
 	for (;;) {
-		if (head == ring->tail) {
+		if (PTNET_TX_NOSPACE(head, kring)) {
 			/* We ran out of slot, let's see if the host has
 			 * freed up some, by reading hwcur and hwtail from
 			 * the CSB. */
 			ptnet_sync_tail(ptring, kring);
 
-			if (head == ring->tail) {
+			if (PTNET_TX_NOSPACE(head, kring)) {
 				/* Still no slots available. Reactivate the
 				 * interrupts so that we can be notified
 				 * when some free slots are made available by
@@ -1236,7 +1243,7 @@
 
 				/* Double-check. */
 				ptnet_sync_tail(ptring, kring);
-				if (likely(head == ring->tail)) {
+				if (likely(PTNET_TX_NOSPACE(head, kring))) {
 					break;
 				}
 


More information about the svn-soc-all mailing list