*/
 
        ieee80211_wake_queues(hw);
+       WL_LOCK(wl);
        blocked = wl_rfkill_set_hw_state(wl);
+       WL_UNLOCK(wl);
        if (!blocked)
                wiphy_rfkill_stop_polling(wl->pub->ieee_hw->wiphy);
 
                        val = 1;
                else
                        val = 0;
+               WL_LOCK(wl);
                wlc_set(wl->wlc, WLC_SET_SHORTSLOT_OVERRIDE, val);
+               WL_UNLOCK(wl);
        }
 
        if (changed & BSS_CHANGED_HT) {
                /* BSSID changed, for whatever reason (IBSS and managed mode) */
                WL_NONE("%s: new BSSID: aid %d  bss:%pM\n", __func__,
                        info->aid, info->bssid);
+               WL_LOCK(wl);
                wlc_set_addrmatch(wl->wlc, RCM_BSSID_OFFSET,
                                  info->bssid);
+               WL_UNLOCK(wl);
        }
        if (changed & BSS_CHANGED_BEACON) {
                /* Beacon data changed, retrieve new beacon (beaconing modes) */
        struct scb *scb = (struct scb *)sta->drv_priv;
 #endif
        struct wl_info *wl = hw->priv;
+       int status;
 
        ASSERT(scb->magic == SCB_MAGIC);
        switch (action) {
                WL_NONE("%s: action = IEEE80211_AMPDU_RX_STOP\n", __func__);
                break;
        case IEEE80211_AMPDU_TX_START:
-               if (!wlc_aggregatable(wl->wlc, tid)) {
+               WL_LOCK(wl);
+               status = wlc_aggregatable(wl->wlc, tid);
+               WL_UNLOCK(wl);
+               if (!status) {
                        /* WL_ERROR("START: tid %d is not agg' able, return FAILURE to stack\n", tid); */
                        return -1;
                }
 {
        struct wl_info *wl;
        struct ieee80211_hw *hw;
+       int status;
 
        hw = pci_get_drvdata(pdev);
        wl = HW_TO_WL(hw);
                return;
        }
 
-       if (!wlc_chipmatch(pdev->vendor, pdev->device)) {
+       WL_LOCK(wl);
+       status = wlc_chipmatch(pdev->vendor, pdev->device);
+       WL_UNLOCK(wl);
+       if (!status) {
                WL_ERROR("wl: wl_remove: wlc_chipmatch failed\n");
                return;
        }