{
        struct iwl_add_sta_resp *add_sta_resp = (void *)pkt->data;
        u8 sta_id = addsta->sta.sta_id;
-       int ret = -EIO;
 
        if (pkt->hdr.flags & IWL_CMD_FAILED_MSK) {
                IWL_ERR(priv, "Bad return from REPLY_ADD_STA (0x%08X)\n",
                        pkt->hdr.flags);
-               return ret;
+               return 0;
        }
 
        IWL_DEBUG_INFO(priv, "Processing response for adding station %u\n",
        switch (add_sta_resp->status) {
        case ADD_STA_SUCCESS_MSK:
                IWL_DEBUG_INFO(priv, "REPLY_ADD_STA PASSED\n");
-               ret = iwl_sta_ucode_activate(priv, sta_id);
                break;
        case ADD_STA_NO_ROOM_IN_TABLE:
                IWL_ERR(priv, "Adding station %d failed, no room in table.\n",
                       addsta->sta.addr);
        spin_unlock_bh(&priv->sta_lock);
 
-       return ret;
+       return 0;
 }
 
 int iwl_add_sta_callback(struct iwl_priv *priv, struct iwl_rx_cmd_buffer *rxb,
                .len = { sizeof(*sta), },
        };
        u8 sta_id __maybe_unused = sta->sta.sta_id;
+       struct iwl_rx_packet *pkt;
+       struct iwl_add_sta_resp *add_sta_resp;
 
        IWL_DEBUG_INFO(priv, "Adding sta %u (%pM) %ssynchronously\n",
                       sta_id, sta->sta.addr, flags & CMD_ASYNC ?  "a" : "");
 
        if (ret || (flags & CMD_ASYNC))
                return ret;
-       /*else the command was successfully sent in SYNC mode, need to free
-        * the reply page */
 
-       iwl_free_resp(&cmd);
+       pkt = cmd.resp_pkt;
+       add_sta_resp = (void *)pkt->data;
 
-       if (cmd.handler_status)
-               IWL_ERR(priv, "%s - error in the CMD response %d\n", __func__,
-                       cmd.handler_status);
+       /* debug messages are printed in the handler */
+       if (!(pkt->hdr.flags & IWL_CMD_FAILED_MSK) &&
+           add_sta_resp->status == ADD_STA_SUCCESS_MSK) {
+               spin_lock_bh(&priv->sta_lock);
+               ret = iwl_sta_ucode_activate(priv, sta_id);
+               spin_unlock_bh(&priv->sta_lock);
+       } else {
+               ret = -EIO;
+       }
+
+       iwl_free_resp(&cmd);
 
-       return cmd.handler_status;
+       return ret;
 }
 
 bool iwl_is_ht40_tx_allowed(struct iwl_priv *priv,