Author: shurd
Date: Wed Nov 28 17:37:17 2018
New Revision: 341156
URL: https://svnweb.freebsd.org/changeset/base/341156

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.
  
  This is the same fix as the r340310 for e1000
  
  PR:           233607
  Reported by:  lev
  Reviewed by:  lev
  MFC after:    3 days
  Sponsored by: Limelight Networks
  Differential Revision:        https://reviews.freebsd.org/D18368

Modified:
  head/sys/dev/ixgbe/ix_txrx.c
  head/sys/dev/ixl/ixl_txrx.c

Modified: head/sys/dev/ixgbe/ix_txrx.c
==============================================================================
--- head/sys/dev/ixgbe/ix_txrx.c        Wed Nov 28 17:31:34 2018        
(r341155)
+++ head/sys/dev/ixgbe/ix_txrx.c        Wed Nov 28 17:37:17 2018        
(r341156)
@@ -297,6 +297,8 @@ ixgbe_isc_txd_credits_update(void *arg, uint16_t txqid
        ntxd = scctx->isc_ntxd[0];
        do {
                delta = (int32_t)cur - (int32_t)prev;
+               if (prev == 0 && cur == 0)
+                       delta += 1;
                if (delta < 0)
                        delta += ntxd;
 

Modified: head/sys/dev/ixl/ixl_txrx.c
==============================================================================
--- head/sys/dev/ixl/ixl_txrx.c Wed Nov 28 17:31:34 2018        (r341155)
+++ head/sys/dev/ixl/ixl_txrx.c Wed Nov 28 17:37:17 2018        (r341156)
@@ -516,7 +516,13 @@ ixl_isc_txd_credits_update_dwb(void *arg, uint16_t txq
        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;
 #if 0
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to