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