On Tue, 2024-03-26 at 20:41 +0530, Aditya Kumar Singh wrote: > @@ -1232,7 +1256,9 @@ ieee80211_assign_beacon(struct ieee80211_sub_if_data *sdata, > } > > rcu_assign_pointer(link->u.ap.beacon, new); > - sdata->u.ap.active = true; > + > + if (ieee80211_num_beaconing_links(sdata) <= 1) > + sdata->u.ap.active = true; I don't understand this change. Neither the <= 1 really, nor the fact that you actually _make_ this change. > @@ -1486,7 +1488,10 @@ static int ieee80211_start_ap(struct wiphy *wiphy, struct net_device *dev, > if (old) > kfree_rcu(old, rcu_head); > RCU_INIT_POINTER(link->u.ap.beacon, NULL); > - sdata->u.ap.active = false; > + > + if (!ieee80211_num_beaconing_links(sdata)) > + sdata->u.ap.active = false; == 0 maybe? Or maybe we should just save/restore the value instead? > list_for_each_entry(vlan, &sdata->u.ap.vlans, u.vlan.list) > netif_carrier_off(vlan->dev); > > - if (ieee80211_num_beaconing_links(sdata) <= 1) Unrelated, but it looks like the VLAN netif_carrier_off() handling above is also wrong and should really go into this if block as well. johannes