svn commit: r193567 - user/kmacy/releng_7_2_fcs/sys/dev/cxgb
Kip Macy
kmacy at FreeBSD.org
Sat Jun 6 06:03:47 UTC 2009
Author: kmacy
Date: Sat Jun 6 06:03:45 2009
New Revision: 193567
URL: http://svn.freebsd.org/changeset/base/193567
Log:
ensure that no tx is in progress
Modified:
user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_adapter.h
user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c
Modified: user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_adapter.h
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_adapter.h Sat Jun 6 05:50:27 2009 (r193566)
+++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_adapter.h Sat Jun 6 06:03:45 2009 (r193567)
@@ -567,7 +567,6 @@ static inline int offload_running(adapte
int cxgb_transmit(struct ifnet *ifp, struct mbuf *m);
void cxgb_qflush(struct ifnet *ifp);
int process_responses(adapter_t *adap, struct sge_qset *qs, int budget);
-void t3_free_qset(adapter_t *sc, struct sge_qset *q);
void cxgb_start(struct ifnet *ifp);
void refill_fl_service(adapter_t *adap, struct sge_fl *fl);
#endif
Modified: user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c
==============================================================================
--- user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c Sat Jun 6 05:50:27 2009 (r193566)
+++ user/kmacy/releng_7_2_fcs/sys/dev/cxgb/cxgb_sge.c Sat Jun 6 06:03:45 2009 (r193567)
@@ -1940,7 +1940,7 @@ t3_mgmt_tx(struct adapter *adap, struct
* as HW contexts, packet buffers, and descriptor rings. Traffic to the
* queue set must be quiesced prior to calling this.
*/
-void
+static void
t3_free_qset(adapter_t *sc, struct sge_qset *q)
{
int i;
@@ -1973,6 +1973,7 @@ t3_free_qset(adapter_t *sc, struct sge_q
}
}
+ mtx_unlock(&q->lock);
MTX_DESTROY(&q->lock);
for (i = 0; i < SGE_TXQ_PER_SET; i++) {
if (q->txq[i].desc) {
@@ -2024,8 +2025,11 @@ t3_free_sge_resources(adapter_t *sc)
for (nqsets = i = 0; i < (sc)->params.nports; i++)
nqsets += sc->port[i].nqsets;
- for (i = 0; i < nqsets; ++i)
+ for (i = 0; i < nqsets; ++i) {
+ TXQ_LOCK(&sc->sge.qs[i]);
t3_free_qset(sc, &sc->sge.qs[i]);
+ }
+
}
/**
@@ -2505,6 +2509,9 @@ t3_sge_alloc_qset(adapter_t *sc, u_int i
struct sge_qset *q = &sc->sge.qs[id];
int i, ret = 0;
+ MTX_INIT(&q->lock, q->namebuf, NULL, MTX_DEF);
+ q->port = pi;
+
for (i = 0; i < SGE_TXQ_PER_SET; i++) {
if ((q->txq[i].txq_mr = buf_ring_alloc(cxgb_txq_buf_ring_size,
@@ -2566,8 +2573,6 @@ t3_sge_alloc_qset(adapter_t *sc, u_int i
q->txq[i].gen = 1;
q->txq[i].size = p->txq_size[i];
}
- MTX_INIT(&q->lock, q->namebuf, NULL, MTX_DEF);
- q->port = pi;
TASK_INIT(&q->txq[TXQ_OFLD].qresume_task, 0, restart_offloadq, q);
TASK_INIT(&q->txq[TXQ_CTRL].qresume_task, 0, restart_ctrlq, q);
@@ -2687,6 +2692,7 @@ t3_sge_alloc_qset(adapter_t *sc, u_int i
err_unlock:
mtx_unlock_spin(&sc->sge.reg_lock);
err:
+ TXQ_LOCK(q);
t3_free_qset(sc, q);
return (ret);
More information about the svn-src-user
mailing list