Project

General

Profile

Actions

Bug #1810

closed

convert iwi(4) to use wlan_token

Added by Johannes.Hofmann about 14 years ago. Updated about 14 years ago.

Status:
Closed
Priority:
Normal
Assignee:
-
Category:
-
Target version:
-
Start date:
Due date:
% Done:

0%

Estimated time:

Description

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->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)
Actions

Also available in: Atom PDF