Author: np
Date: Tue Feb 24 18:22:24 2015
New Revision: 279244
URL: https://svnweb.freebsd.org/changeset/base/279244

Log:
  cxgbe(4): wait for the hardware to catch up before destroying a netmap txq.
  
  MFC after:    2 weeks

Modified:
  head/sys/dev/cxgbe/t4_netmap.c

Modified: head/sys/dev/cxgbe/t4_netmap.c
==============================================================================
--- head/sys/dev/cxgbe/t4_netmap.c      Tue Feb 24 18:19:25 2015        
(r279243)
+++ head/sys/dev/cxgbe/t4_netmap.c      Tue Feb 24 18:22:24 2015        
(r279244)
@@ -514,12 +514,17 @@ cxgbe_netmap_off(struct adapter *sc, str
                if_printf(ifp, "netmap disable_vi failed: %d\n", rc);
        nm_clear_native_flags(na);
 
-       /*
-        * XXXNM: We need to make sure that the tx queues are quiet and won't
-        * request any more SGE_EGR_UPDATEs.
-        */
-
        for_each_nm_txq(pi, i, nm_txq) {
+               struct sge_qstat *spg = (void *)&nm_txq->desc[nm_txq->sidx];
+
+               /* Wait for hw pidx to catch up ... */
+               while (be16toh(nm_txq->pidx) != spg->pidx)
+                       pause("nmpidx", 1);
+
+               /* ... and then for the cidx. */
+               while (spg->pidx != spg->cidx)
+                       pause("nmcidx", 1);
+
                free_nm_txq_hwq(pi, nm_txq);
        }
        for_each_nm_rxq(pi, i, nm_rxq) {
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to