PERFORCE change 39688 for review

Sam Leffler sam at FreeBSD.org
Tue Oct 14 06:54:57 PDT 2003


http://perforce.freebsd.org/chv.cgi?CH=39688

Change 39688 by sam at 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 *);


More information about the p4-projects mailing list