svn commit: r340310 - head/sys/dev/e1000

Stephen Hurd shurd at FreeBSD.org
Fri Nov 9 22:18:44 UTC 2018


Author: shurd
Date: Fri Nov  9 22:18:43 2018
New Revision: 340310
URL: https://svnweb.freebsd.org/changeset/base/340310

Log:
  Fix first-packet completion
  
  The first packet after the ring is initialized was never
  completed as isc_txd_credits_update() would not include it in the
  count of completed packets. This caused netmap to never complete
  a batch. See PR 233022 for more details.
  
  PR:		233022
  Reported by:	lev
  Reviewed by:	lev
  MFC after:	3 days
  Sponsored by:	Limelight Networks
  Differential Revision:	https://reviews.freebsd.org/D17931

Modified:
  head/sys/dev/e1000/em_txrx.c
  head/sys/dev/e1000/igb_txrx.c

Modified: head/sys/dev/e1000/em_txrx.c
==============================================================================
--- head/sys/dev/e1000/em_txrx.c	Fri Nov  9 21:45:42 2018	(r340309)
+++ head/sys/dev/e1000/em_txrx.c	Fri Nov  9 22:18:43 2018	(r340310)
@@ -458,7 +458,13 @@ em_isc_txd_credits_update(void *arg, uint16_t txqid, b
 	ntxd = scctx->isc_ntxd[0];
 	do {
 		delta = (int32_t)cur - (int32_t)prev;
+		/*
+		 * XXX This appears to be a hack for first-packet.
+		 * A correct fix would prevent prev == cur in the first place.
+		 */
 		MPASS(prev == 0 || delta != 0);
+		if (prev == 0 && cur == 0)
+			delta += 1;
 		if (delta < 0)
 			delta += ntxd;
 		DPRINTF(iflib_get_dev(adapter->ctx),

Modified: head/sys/dev/e1000/igb_txrx.c
==============================================================================
--- head/sys/dev/e1000/igb_txrx.c	Fri Nov  9 21:45:42 2018	(r340309)
+++ head/sys/dev/e1000/igb_txrx.c	Fri Nov  9 22:18:43 2018	(r340310)
@@ -333,7 +333,13 @@ igb_isc_txd_credits_update(void *arg, uint16_t txqid, 
 	ntxd = scctx->isc_ntxd[0];
 	do {
 		delta = (int32_t)cur - (int32_t)prev;
+		/*
+		 * XXX This appears to be a hack for first-packet.
+		 * A correct fix would prevent prev == cur in the first place.
+		 */
 		MPASS(prev == 0 || delta != 0);
+		if (prev == 0 && cur == 0)
+			delta += 1;
 		if (delta < 0)
 			delta += ntxd;
 


More information about the svn-src-head mailing list