svn commit: r279244 - head/sys/dev/cxgbe
Navdeep Parhar
np at FreeBSD.org
Tue Feb 24 18:22:25 UTC 2015
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) {
More information about the svn-src-head
mailing list