struct ieee80211_bss_conf *ol[IEEE80211_MLD_MAX_NUM_LINKS])
 {
        struct ath12k_vif *ahvif = ath12k_vif_to_ahvif(vif);
+       unsigned long to_remove = old_links & ~new_links;
        unsigned long to_add = ~old_links & new_links;
        struct ath12k_hw *ah = ath12k_hw_to_ah(hw);
        struct ath12k_link_vif *arvif;
                        return -EINVAL;
        }
 
+       for_each_set_bit(link_id, &to_remove, IEEE80211_MLD_MAX_NUM_LINKS) {
+               arvif = wiphy_dereference(hw->wiphy, ahvif->link[link_id]);
+               if (WARN_ON(!arvif))
+                       return -EINVAL;
+
+               if (!arvif->is_created)
+                       continue;
+
+               if (WARN_ON(!arvif->ar))
+                       return -EINVAL;
+
+               ath12k_mac_remove_link_interface(hw, arvif);
+               ath12k_mac_unassign_link_vif(arvif);
+       }
+
        return 0;
 }
 
        if (ahvif->vdev_type != WMI_VDEV_TYPE_MONITOR &&
            ar->num_started_vdevs == 1 && ar->monitor_vdev_created)
                ath12k_mac_monitor_stop(ar);
-
-       ath12k_mac_remove_link_interface(hw, arvif);
-       ath12k_mac_unassign_link_vif(arvif);
 }
 
 static int