switching_chanctx, &ret))
                goto out;
 
-       ret = iwl_mvm_add_link(mvm, vif);
-       if (ret)
-               goto out;
+       if (!switching_chanctx) {
+               ret = iwl_mvm_add_link(mvm, vif);
+               if (ret)
+                       goto out;
+       } else {
+               ret = iwl_mvm_link_changed(mvm, vif, 0, false);
+               if (ret)
+                       goto out_remove_link;
+       }
+
        ret = iwl_mvm_link_changed(mvm, vif, LINK_CONTEXT_MODIFY_ACTIVE |
                                   LINK_CONTEXT_MODIFY_RATES_INFO,
                                   true);
        if (vif->type == NL80211_IFTYPE_MONITOR)
                iwl_mvm_mld_rm_snif_sta(mvm, vif);
 
-       /* Link needs to be deactivated before removal */
        iwl_mvm_link_changed(mvm, vif, LINK_CONTEXT_MODIFY_ACTIVE, false);
-       iwl_mvm_remove_link(mvm, vif);
-
+       if (!switching_chanctx)
+               iwl_mvm_remove_link(mvm, vif);
 out:
        if (switching_chanctx)
                return;