convert iwi(4) to use wlan_token
Johannes Hofmann
johannes.hofmann at gmx.de
Wed Aug 25 15:19:01 PDT 2010
Hi,
the patch below converts iwi(4) to use the new wlan_token for locking.
This is more or less copied from iwn(4).
I'm not sure if the comment in iwi_var.h still applies and should be
kept.
Johannes
PS: The patch is only tested on an UP system.
diff --git a/sys/dev/netif/iwi/if_iwi.c b/sys/dev/netif/iwi/if_iwi.c
index 88b8437..7617cc6 100644
--- a/sys/dev/netif/iwi/if_iwi.c
+++ b/sys/dev/netif/iwi/if_iwi.c
@@ -1743,7 +1743,7 @@ iwi_cmd(struct iwi_softc *sc, uint8_t type, void *data, uint8_t len)
sc->cmdq.cur = (sc->cmdq.cur + 1) % IWI_CMD_RING_COUNT;
CSR_WRITE_4(sc, IWI_CSR_CMD_WIDX, sc->cmdq.cur);
- return lksleep(sc, &sc->sc_lock, PINTERLOCKED, "iwicmd", hz);
+ return tsleep(sc, 0, "iwicmd", hz);
}
static void
@@ -1979,9 +1979,11 @@ iwi_start_locked(struct ifnet *ifp)
static void
iwi_start(struct ifnet *ifp)
{
- struct iwi_softc *sc = ifp->if_softc;
+ struct iwi_softc *sc;
IWI_LOCK_DECL;
+ sc = ifp->if_softc;
+
IWI_LOCK(sc);
iwi_start_locked(ifp);
IWI_UNLOCK(sc);
@@ -2489,7 +2491,7 @@ iwi_load_firmware(struct iwi_softc *sc, const struct iwi_fw *fw)
CSR_WRITE_4(sc, IWI_CSR_CTL, tmp | IWI_CTL_ALLOW_STANDBY);
/* wait at most one second for firmware initialization to complete */
- error = lksleep(sc, &sc->sc_lock, PINTERLOCKED, "iwiinit", hz);
+ error = tsleep(sc, 0, "iwiinit", hz);
if (error != 0) {
device_printf(sc->sc_dev, "timeout waiting for firmware "
"initialization to complete\n");
diff --git a/sys/dev/netif/iwi/if_iwivar.h b/sys/dev/netif/iwi/if_iwivar.h
index 5e78be9..c2184a8 100644
--- a/sys/dev/netif/iwi/if_iwivar.h
+++ b/sys/dev/netif/iwi/if_iwivar.h
@@ -243,14 +243,9 @@ struct iwi_softc {
* NB.: This models the only instance of async locking in iwi_init_locked
* and must be kept in sync.
*/
-#define IWI_LOCK_INIT(sc) \
- lockinit(&(sc)->sc_lock, \
- __DECONST(char *, device_get_nameunit((sc)->sc_dev)), \
- 0, LK_CANRECURSE)
-
-#define IWI_LOCK_DESTROY(sc) lockuninit(&(sc)->sc_lock)
#define IWI_LOCK_DECL
-#define IWI_LOCK_ASSERT(sc) \
- KKASSERT(lockstatus(&(sc)->sc_lock, curthread) == LK_EXCLUSIVE)
-#define IWI_LOCK(sc) lockmgr(&(sc)->sc_lock, LK_EXCLUSIVE)
-#define IWI_UNLOCK(sc) lockmgr(&(sc)->sc_lock, LK_RELEASE)
+#define IWI_LOCK_INIT(_sc)
+#define IWI_LOCK(_sc) lwkt_gettoken(&wlan_token)
+#define IWI_UNLOCK(_sc) lwkt_reltoken(&wlan_token)
+#define IWI_LOCK_DESTROY(_sc)
+#define IWI_LOCK_ASSERT(_sc) ASSERT_LWKT_TOKEN_HELD(&wlan_token)
More information about the Submit
mailing list