From owner-svn-src-user@FreeBSD.ORG Sat Jun 6 06:03:46 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id BAF6C106566C; Sat, 6 Jun 2009 06:03:46 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 8F1988FC08; Sat, 6 Jun 2009 06:03:46 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n5663kd7050174; Sat, 6 Jun 2009 06:03:46 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n5663k1V050172; Sat, 6 Jun 2009 06:03:46 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200906060603.n5663k1V050172@svn.freebsd.org> From: Kip Macy Date: Sat, 6 Jun 2009 06:03:46 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r193567 - user/kmacy/releng_7_2_fcs/sys/dev/cxgb X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 06 Jun 2009 06:03:47 -0000 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);