Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 6 Jun 2009 06:03:46 +0000 (UTC)
From:      Kip Macy <kmacy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-user@freebsd.org
Subject:   svn commit: r193567 - user/kmacy/releng_7_2_fcs/sys/dev/cxgb
Message-ID:  <200906060603.n5663k1V050172@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200906060603.n5663k1V050172>