mutex_lock(&priv->mutex);
        iwl_scan_cancel_timeout(priv, 100);
-       mutex_unlock(&priv->mutex);
 
        /* If we are getting WEP group key and we didn't receive any key mapping
         * so far, we are in legacy wep mode (group key only), otherwise we are
                ret = -EINVAL;
        }
 
+       mutex_unlock(&priv->mutex);
        IWL_DEBUG_MAC80211(priv, "leave\n");
 
        return ret;
 
        struct iwl_host_cmd cmd = {
                .id = REPLY_WEPKEY,
                .data = wep_cmd,
-               .flags = CMD_ASYNC,
+               .flags = CMD_SYNC,
        };
 
+       might_sleep();
+
        memset(wep_cmd, 0, cmd_size +
                        (sizeof(struct iwl_wep_key) * WEP_KEYS_MAX));
 
                               struct ieee80211_key_conf *keyconf)
 {
        int ret;
-       unsigned long flags;
 
-       spin_lock_irqsave(&priv->sta_lock, flags);
+       WARN_ON(!mutex_is_locked(&priv->mutex));
+
        IWL_DEBUG_WEP(priv, "Removing default WEP key: idx=%d\n",
                      keyconf->keyidx);
 
        memset(&priv->wep_keys[keyconf->keyidx], 0, sizeof(priv->wep_keys[0]));
        if (iwl_is_rfkill(priv)) {
                IWL_DEBUG_WEP(priv, "Not sending REPLY_WEPKEY command due to RFKILL.\n");
-               spin_unlock_irqrestore(&priv->sta_lock, flags);
+               /* but keys in device are clear anyway so return success */
                return 0;
        }
        ret = iwl_send_static_wepkey_cmd(priv, 1);
        IWL_DEBUG_WEP(priv, "Remove default WEP key: idx=%d ret=%d\n",
                      keyconf->keyidx, ret);
-       spin_unlock_irqrestore(&priv->sta_lock, flags);
 
        return ret;
 }
                            struct ieee80211_key_conf *keyconf)
 {
        int ret;
-       unsigned long flags;
+
+       WARN_ON(!mutex_is_locked(&priv->mutex));
 
        if (keyconf->keylen != WEP_KEY_LEN_128 &&
            keyconf->keylen != WEP_KEY_LEN_64) {
        keyconf->hw_key_idx = HW_KEY_DEFAULT;
        priv->stations[IWL_AP_ID].keyinfo.alg = ALG_WEP;
 
-       spin_lock_irqsave(&priv->sta_lock, flags);
        priv->default_wep_key++;
 
        if (test_and_set_bit(keyconf->keyidx, &priv->ucode_key_table))
                IWL_ERR(priv, "index %d already used in uCode key table.\n",
-                       keyconf->keyidx);
+                         keyconf->keyidx);
 
        priv->wep_keys[keyconf->keyidx].key_size = keyconf->keylen;
        memcpy(&priv->wep_keys[keyconf->keyidx].key, &keyconf->key,
        ret = iwl_send_static_wepkey_cmd(priv, 0);
        IWL_DEBUG_WEP(priv, "Set default WEP key: len=%d idx=%d ret=%d\n",
                keyconf->keylen, keyconf->keyidx, ret);
-       spin_unlock_irqrestore(&priv->sta_lock, flags);
 
        return ret;
 }