Date: Tue, 24 Feb 2015 18:22:25 +0000 (UTC) From: Navdeep Parhar <np@FreeBSD.org> To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r279244 - head/sys/dev/cxgbe Message-ID: <201502241822.t1OIMPXi056778@svn.freebsd.org>
next in thread | raw e-mail | index | archive | help
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) {
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201502241822.t1OIMPXi056778>