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