From owner-p4-projects@FreeBSD.ORG Tue Oct 14 06:54:57 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 2FD7016A4C0; Tue, 14 Oct 2003 06:54:57 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0033F16A4B3 for ; Tue, 14 Oct 2003 06:54:56 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 554A743FE1 for ; Tue, 14 Oct 2003 06:54:52 -0700 (PDT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.9/8.12.9) with ESMTP id h9EDspXJ054922 for ; Tue, 14 Oct 2003 06:54:51 -0700 (PDT) (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.9/8.12.9/Submit) id h9EDsp6g054919 for perforce@freebsd.org; Tue, 14 Oct 2003 06:54:51 -0700 (PDT) (envelope-from sam@freebsd.org) Date: Tue, 14 Oct 2003 06:54:51 -0700 (PDT) Message-Id: <200310141354.h9EDsp6g054919@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 39688 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 14 Oct 2003 13:54:57 -0000 http://perforce.freebsd.org/chv.cgi?CH=39688 Change 39688 by sam@sam_ebb on 2003/10/14 06:54:12 o #define locking calls o destroy txbuf and txq locks on detach Affected files ... .. //depot/projects/netperf/sys/dev/ath/if_ath.c#19 edit .. //depot/projects/netperf/sys/dev/ath/if_ath_pci.c#4 edit .. //depot/projects/netperf/sys/dev/ath/if_athvar.h#5 edit Differences ... ==== //depot/projects/netperf/sys/dev/ath/if_ath.c#19 (text+ko) ==== @@ -231,10 +231,8 @@ callout_init(&sc->sc_scan_ch, CALLOUT_MPSAFE); callout_init(&sc->sc_cal_ch, CALLOUT_MPSAFE); - mtx_init(&sc->sc_txbuflock, - device_get_nameunit(sc->sc_dev), "xmit buf q", MTX_DEF); - mtx_init(&sc->sc_txqlock, - device_get_nameunit(sc->sc_dev), "xmit q", MTX_DEF); + ATH_TXBUF_LOCK_INIT(sc); + ATH_TXQ_LOCK_INIT(sc); TASK_INIT(&sc->sc_txtask, 0, ath_tx_proc, sc); TASK_INIT(&sc->sc_rxtask, 0, ath_rx_proc, sc); @@ -335,7 +333,9 @@ ath_desc_free(sc); ath_hal_detach(sc->sc_ah); ieee80211_ifdetach(ifp); - mtx_unlock(&sc->sc_mtx); + + ATH_TXBUF_LOCK_DESTROY(sc); + ATH_TXQ_LOCK_DESTROY(sc); return 0; } @@ -500,7 +500,7 @@ DPRINTF(("ath_init: if_flags 0x%x\n", ifp->if_flags)); - mtx_lock(&sc->sc_mtx); + ATH_LOCK(sc); /* * Stop anything previously setup. This is safe * whether this is the first time through or not. @@ -562,7 +562,7 @@ else ieee80211_new_state(ic, IEEE80211_S_RUN, -1); done: - mtx_unlock(&sc->sc_mtx); + ATH_UNLOCK(sc); } static void @@ -575,7 +575,7 @@ DPRINTF(("ath_stop: invalid %u if_flags 0x%x\n", sc->sc_invalid, ifp->if_flags)); - mtx_lock(&sc->sc_mtx); + ATH_LOCK(sc); if (ifp->if_flags & IFF_RUNNING) { /* * Shutdown the hardware and driver: @@ -606,7 +606,7 @@ if (!sc->sc_invalid) ath_hal_setpower(ah, HAL_PM_FULL_SLEEP, 0); } - mtx_unlock(&sc->sc_mtx); + ATH_UNLOCK(sc); } /* @@ -666,11 +666,11 @@ /* * Grab a TX buffer and associated resources. */ - mtx_lock(&sc->sc_txbuflock); + ATH_TXBUF_LOCK(sc); bf = TAILQ_FIRST(&sc->sc_txbuf); if (bf != NULL) TAILQ_REMOVE(&sc->sc_txbuf, bf, bf_list); - mtx_unlock(&sc->sc_txbuflock); + ATH_TXBUF_UNLOCK(sc); if (bf == NULL) { DPRINTF(("ath_start: out of xmit buffers\n")); sc->sc_stats.ast_tx_qstop++; @@ -690,16 +690,16 @@ DPRINTF(("ath_start: ignore data packet, " "state %u\n", ic->ic_state)); sc->sc_stats.ast_tx_discard++; - mtx_lock(&sc->sc_txbuflock); + ATH_TXBUF_LOCK(sc); TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); - mtx_unlock(&sc->sc_txbuflock); + ATH_TXBUF_UNLOCK(sc); break; } IF_DEQUEUE(&ifp->if_snd, m); if (m == NULL) { - mtx_lock(&sc->sc_txbuflock); + ATH_TXBUF_LOCK(sc); TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); - mtx_unlock(&sc->sc_txbuflock); + ATH_TXBUF_UNLOCK(sc); break; } ifp->if_opackets++; @@ -767,9 +767,9 @@ if (ath_tx_start(sc, ni, bf, m)) { bad: - mtx_lock(&sc->sc_txbuflock); + ATH_TXBUF_LOCK(sc); TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); - mtx_unlock(&sc->sc_txbuflock); + ATH_TXBUF_UNLOCK(sc); ifp->if_oerrors++; if (ni && ni != ic->ic_bss) ieee80211_free_node(ic, ni); @@ -839,7 +839,7 @@ struct ifreq *ifr = (struct ifreq *)data; int error = 0; - mtx_lock(&sc->sc_mtx); + ATH_LOCK(sc); switch (cmd) { case SIOCSIFFLAGS: if (ifp->if_flags & IFF_UP) { @@ -889,7 +889,7 @@ } break; } - mtx_unlock(&sc->sc_mtx); + ATH_UNLOCK(sc); return error; } @@ -1989,7 +1989,7 @@ * Insert the frame on the outbound list and * pass it on to the hardware. */ - mtx_lock(&sc->sc_txqlock); + ATH_TXQ_LOCK(sc); TAILQ_INSERT_TAIL(&sc->sc_txq, bf, bf_list); if (sc->sc_txlink == NULL) { ath_hal_puttxbuf(ah, sc->sc_txhalq, bf->bf_daddr); @@ -2001,7 +2001,7 @@ sc->sc_txlink, (caddr_t)bf->bf_daddr, bf->bf_desc)); } sc->sc_txlink = &bf->bf_desc[bf->bf_nseg - 1].ds_link; - mtx_unlock(&sc->sc_txqlock); + ATH_TXQ_UNLOCK(sc); ath_hal_txstart(ah, sc->sc_txhalq); return 0; @@ -2025,11 +2025,11 @@ npending, (caddr_t) ath_hal_gettxbuf(sc->sc_ah, sc->sc_txhalq), sc->sc_txlink)); for (;;) { - mtx_lock(&sc->sc_txqlock); + ATH_TXQ_LOCK(sc); bf = TAILQ_FIRST(&sc->sc_txq); if (bf == NULL) { sc->sc_txlink = NULL; - mtx_unlock(&sc->sc_txqlock); + ATH_TXQ_UNLOCK(sc); break; } /* only the last descriptor is needed */ @@ -2040,11 +2040,11 @@ ath_printtxbuf(bf, status == HAL_OK); #endif if (status == HAL_EINPROGRESS) { - mtx_unlock(&sc->sc_txqlock); + ATH_TXQ_UNLOCK(sc); break; } TAILQ_REMOVE(&sc->sc_txq, bf, bf_list); - mtx_unlock(&sc->sc_txqlock); + ATH_TXQ_UNLOCK(sc); ni = bf->bf_node; if (ni != NULL) { @@ -2086,9 +2086,9 @@ bf->bf_m = NULL; bf->bf_node = NULL; - mtx_lock(&sc->sc_txbuflock); + ATH_TXBUF_LOCK(sc); TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); - mtx_unlock(&sc->sc_txbuflock); + ATH_TXBUF_UNLOCK(sc); } ifp->if_flags &= ~IFF_OACTIVE; sc->sc_tx_timer = 0; @@ -2118,15 +2118,15 @@ (caddr_t) ath_hal_gettxbuf(ah, sc->sc_bhalq))); } for (;;) { - mtx_lock(&sc->sc_txqlock); + ATH_TXQ_LOCK(sc); bf = TAILQ_FIRST(&sc->sc_txq); if (bf == NULL) { sc->sc_txlink = NULL; - mtx_unlock(&sc->sc_txqlock); + ATH_TXQ_UNLOCK(sc); break; } TAILQ_REMOVE(&sc->sc_txq, bf, bf_list); - mtx_unlock(&sc->sc_txqlock); + ATH_TXQ_UNLOCK(sc); #ifdef AR_DEBUG if (ath_debug) ath_printtxbuf(bf, @@ -2136,9 +2136,9 @@ m_freem(bf->bf_m); bf->bf_m = NULL; bf->bf_node = NULL; - mtx_lock(&sc->sc_txbuflock); + ATH_TXBUF_LOCK(sc); TAILQ_INSERT_TAIL(&sc->sc_txbuf, bf, bf_list); - mtx_unlock(&sc->sc_txbuflock); + ATH_TXBUF_UNLOCK(sc); } ifp->if_flags &= ~IFF_OACTIVE; sc->sc_tx_timer = 0; ==== //depot/projects/netperf/sys/dev/ath/if_ath_pci.c#4 (text+ko) ==== @@ -194,14 +194,13 @@ goto bad3; } - mtx_init(&sc->sc_mtx, device_get_nameunit(dev), - MTX_NETWORK_LOCK, MTX_DEF | MTX_RECURSE); + ATH_LOCK_INIT(sc); error = ath_attach(pci_get_device(dev), sc); if (error == 0) return error; - mtx_destroy(&sc->sc_mtx); + ATH_LOCK_DESTROY(sc); bus_dma_tag_destroy(sc->sc_dmat); bad3: bus_teardown_intr(dev, psc->sc_irq, psc->sc_ih); @@ -231,7 +230,7 @@ bus_dma_tag_destroy(sc->sc_dmat); bus_release_resource(dev, SYS_RES_MEMORY, BS_BAR, psc->sc_sr); - mtx_destroy(&sc->sc_mtx); + ATH_LOCK_DESTROY(sc); return (0); } ==== //depot/projects/netperf/sys/dev/ath/if_athvar.h#5 (text+ko) ==== @@ -155,6 +155,31 @@ #define sc_tx_th u_tx_rt.th #define sc_rx_th u_rx_rt.th +#define ATH_LOCK_INIT(_sc) \ + mtx_init(&(_sc)->sc_mtx, device_get_nameunit((_sc)->sc_dev), \ + MTX_NETWORK_LOCK, MTX_DEF | MTX_RECURSE) +#define ATH_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_mtx) +#define ATH_LOCK(_sc) mtx_lock(&(_sc)->sc_mtx) +#define ATH_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_mtx) +#define ATH_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_mtx, MA_OWNED) + +#define ATH_TXBUF_LOCK_INIT(_sc) \ + mtx_init(&(_sc)->sc_txbuflock, \ + device_get_nameunit((_sc)->sc_dev), "xmit buf q", MTX_DEF) +#define ATH_TXBUF_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_txbuflock) +#define ATH_TXBUF_LOCK(_sc) mtx_lock(&(_sc)->sc_txbuflock) +#define ATH_TXBUF_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_txbuflock) +#define ATH_TXBUF_LOCK_ASSERT(_sc) \ + mtx_assert(&(_sc)->sc_txbuflock, MA_OWNED) + +#define ATH_TXQ_LOCK_INIT(_sc) \ + mtx_init(&(_sc)->sc_txqlock, \ + device_get_nameunit((_sc)->sc_dev), "xmit q", MTX_DEF) +#define ATH_TXQ_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->sc_txqlock) +#define ATH_TXQ_LOCK(_sc) mtx_lock(&(_sc)->sc_txqlock) +#define ATH_TXQ_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_txqlock) +#define ATH_TXQ_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_txqlock, MA_OWNED) + int ath_attach(u_int16_t, struct ath_softc *); int ath_detach(struct ath_softc *); void ath_resume(struct ath_softc *);