return 0;
 }
 
+static void ieee80211_reconfig_ap_links(struct ieee80211_local *local,
+                                       struct ieee80211_sub_if_data *sdata,
+                                       u32 changed)
+{
+       int link_id;
+
+       for (link_id = 0; link_id < ARRAY_SIZE(sdata->link); link_id++) {
+               struct ieee80211_link_data *link;
+
+               if (!(sdata->vif.active_links & BIT(link_id)))
+                       continue;
+
+               link = sdata_dereference(sdata->link[link_id], sdata);
+               if (!link)
+                       continue;
+
+               if (rcu_access_pointer(link->u.ap.beacon))
+                       drv_start_ap(local, sdata, link->conf);
+
+               if (!link->conf->enable_beacon)
+                       continue;
+
+               changed |= BSS_CHANGED_BEACON |
+                          BSS_CHANGED_BEACON_ENABLED;
+
+               ieee80211_link_info_change_notify(sdata, link, changed);
+       }
+}
+
 int ieee80211_reconfig(struct ieee80211_local *local)
 {
        struct ieee80211_hw *hw = &local->hw;
                        changed |= BSS_CHANGED_IBSS;
                        fallthrough;
                case NL80211_IFTYPE_AP:
-                       changed |= BSS_CHANGED_SSID | BSS_CHANGED_P2P_PS;
+                       changed |= BSS_CHANGED_P2P_PS;
+
+                       if (sdata->vif.valid_links)
+                               ieee80211_vif_cfg_change_notify(sdata,
+                                                               BSS_CHANGED_SSID);
+                       else
+                               changed |= BSS_CHANGED_SSID;
 
                        if (sdata->vif.bss_conf.ftm_responder == 1 &&
                            wiphy_ext_feature_isset(sdata->local->hw.wiphy,
                        if (sdata->vif.type == NL80211_IFTYPE_AP) {
                                changed |= BSS_CHANGED_AP_PROBE_RESP;
 
+                               if (sdata->vif.valid_links) {
+                                       ieee80211_reconfig_ap_links(local,
+                                                                   sdata,
+                                                                   changed);
+                                       break;
+                               }
+
                                if (rcu_access_pointer(sdata->deflink.u.ap.beacon))
                                        drv_start_ap(local, sdata,
                                                     sdata->deflink.conf);