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