Message ID | 20240506211311.43bd82c6da04.Ib39bec3aa198d137385f081e7e1910dcbde3aa1b@changeid (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Johannes Berg |
Headers | show |
Series | wifi: mac80211: move radar detect work to sdata | expand |
On 5/7/24 00:43, Johannes Berg wrote: > At some point we thought perhaps this could be per link, but > really that didn't happen, and it's confusing. Radar detection > still uses the deflink to allocate the channel, but the work > need not be there. Move it back. I'm currently working on MLO DFS support. It is better if the work can be left in per link structure. With proper support, instead of deflink it will use appropriate link.
On Thu, 2024-05-09 at 09:52 +0530, Aditya Kumar Singh wrote: > On 5/7/24 00:43, Johannes Berg wrote: > > At some point we thought perhaps this could be per link, but > > really that didn't happen, and it's confusing. Radar detection > > still uses the deflink to allocate the channel, but the work > > need not be there. Move it back. > > I'm currently working on MLO DFS support. It is better if the work can > be left in per link structure. With proper support, instead of deflink > it will use appropriate link. A number of patches I have actually depend on this (though only by patch, not semantically), so it might be better to leave it and just move it back. In any case, your work will likely have (simple) conflicts in some places with the other patches I posted. But we have a couple of weeks to decide, I guess, given the release is around the corner. johannes
On 5/10/24 19:57, Johannes Berg wrote: > On Thu, 2024-05-09 at 09:52 +0530, Aditya Kumar Singh wrote: >> On 5/7/24 00:43, Johannes Berg wrote: >>> At some point we thought perhaps this could be per link, but >>> really that didn't happen, and it's confusing. Radar detection >>> still uses the deflink to allocate the channel, but the work >>> need not be there. Move it back. >> >> I'm currently working on MLO DFS support. It is better if the work can >> be left in per link structure. With proper support, instead of deflink >> it will use appropriate link. > > A number of patches I have actually depend on this (though only by > patch, not semantically), so it might be better to leave it and just > move it back. Oh I see :) > > In any case, your work will likely have (simple) conflicts in some > places with the other patches I posted. Yes correct. Those are minor as far as I saw them and those seems fine as well. But this one, felt like I will be reverting it soon so if possible let's not merge it unless it is affecting the code base. > > But we have a couple of weeks to decide, I guess, given the release is > around the corner. > Sure. I'm doing testing as of now with my changes so it will take some time to appear here. If your changes gets merged by then, I will rebase it.
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c index b08e5d7687e3..76c26de5da13 100644 --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c @@ -1666,7 +1666,7 @@ static int ieee80211_stop_ap(struct wiphy *wiphy, struct net_device *dev, if (sdata->wdev.cac_started) { chandef = link_conf->chanreq.oper; - wiphy_delayed_work_cancel(wiphy, &link->dfs_cac_timer_work); + wiphy_delayed_work_cancel(wiphy, &sdata->dfs_cac_timer_work); cfg80211_cac_event(sdata->dev, &chandef, NL80211_RADAR_CAC_ABORTED, GFP_KERNEL); @@ -3466,7 +3466,7 @@ static int ieee80211_start_radar_detection(struct wiphy *wiphy, if (err) goto out_unlock; - wiphy_delayed_work_queue(wiphy, &sdata->deflink.dfs_cac_timer_work, + wiphy_delayed_work_queue(wiphy, &sdata->dfs_cac_timer_work, msecs_to_jiffies(cac_time_ms)); out_unlock: @@ -3487,7 +3487,7 @@ static void ieee80211_end_cac(struct wiphy *wiphy, * will no longer be true */ wiphy_delayed_work_cancel(wiphy, - &sdata->deflink.dfs_cac_timer_work); + &sdata->dfs_cac_timer_work); if (sdata->wdev.cac_started) { ieee80211_link_release_channel(&sdata->deflink); diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h index eb62b7d4b4f7..d51aa96f2948 100644 --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h @@ -1059,7 +1059,6 @@ struct ieee80211_link_data { int ap_power_level; /* in dBm */ bool radar_required; - struct wiphy_delayed_work dfs_cac_timer_work; union { struct ieee80211_link_data_managed mgd; @@ -1158,6 +1157,8 @@ struct ieee80211_sub_if_data { struct ieee80211_link_data deflink; struct ieee80211_link_data __rcu *link[IEEE80211_MLD_MAX_NUM_LINKS]; + struct wiphy_delayed_work dfs_cac_timer_work; + /* for ieee80211_set_active_links_async() */ struct wiphy_work activate_links_work; u16 desired_active_links; diff --git a/net/mac80211/iface.c b/net/mac80211/iface.c index dc42902e2693..1ef4b6dc3730 100644 --- a/net/mac80211/iface.c +++ b/net/mac80211/iface.c @@ -554,7 +554,7 @@ static void ieee80211_do_stop(struct ieee80211_sub_if_data *sdata, bool going_do wiphy_work_cancel(local->hw.wiphy, &sdata->deflink.color_change_finalize_work); wiphy_delayed_work_cancel(local->hw.wiphy, - &sdata->deflink.dfs_cac_timer_work); + &sdata->dfs_cac_timer_work); if (sdata->wdev.cac_started) { chandef = sdata->vif.bss_conf.chanreq.oper; @@ -1746,6 +1746,8 @@ static void ieee80211_setup_sdata(struct ieee80211_sub_if_data *sdata, wiphy_work_init(&sdata->work, ieee80211_iface_work); wiphy_work_init(&sdata->activate_links_work, ieee80211_activate_links_work); + wiphy_delayed_work_init(&sdata->dfs_cac_timer_work, + ieee80211_dfs_cac_timer_work); switch (type) { case NL80211_IFTYPE_P2P_GO: diff --git a/net/mac80211/link.c b/net/mac80211/link.c index af0321408a97..f57282488222 100644 --- a/net/mac80211/link.c +++ b/net/mac80211/link.c @@ -45,8 +45,6 @@ void ieee80211_link_init(struct ieee80211_sub_if_data *sdata, ieee80211_color_collision_detection_work); INIT_LIST_HEAD(&link->assigned_chanctx_list); INIT_LIST_HEAD(&link->reserved_chanctx_list); - wiphy_delayed_work_init(&link->dfs_cac_timer_work, - ieee80211_dfs_cac_timer_work); if (!deflink) { switch (sdata->vif.type) { diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c index a481728d78c7..04a125a9ffd1 100644 --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c @@ -2602,16 +2602,15 @@ void ieee80211_dynamic_ps_timer(struct timer_list *t) void ieee80211_dfs_cac_timer_work(struct wiphy *wiphy, struct wiphy_work *work) { - struct ieee80211_link_data *link = - container_of(work, struct ieee80211_link_data, + struct ieee80211_sub_if_data *sdata = + container_of(work, struct ieee80211_sub_if_data, dfs_cac_timer_work.work); - struct cfg80211_chan_def chandef = link->conf->chanreq.oper; - struct ieee80211_sub_if_data *sdata = link->sdata; + struct cfg80211_chan_def chandef = sdata->vif.bss_conf.chanreq.oper; lockdep_assert_wiphy(sdata->local->hw.wiphy); if (sdata->wdev.cac_started) { - ieee80211_link_release_channel(link); + ieee80211_link_release_channel(&sdata->deflink); cfg80211_cac_event(sdata->dev, &chandef, NL80211_RADAR_CAC_FINISHED, GFP_KERNEL); diff --git a/net/mac80211/util.c b/net/mac80211/util.c index 0b893e958959..30d3efedaa8e 100644 --- a/net/mac80211/util.c +++ b/net/mac80211/util.c @@ -3461,7 +3461,7 @@ void ieee80211_dfs_cac_cancel(struct ieee80211_local *local) * will no longer be true */ wiphy_delayed_work_cancel(local->hw.wiphy, - &sdata->deflink.dfs_cac_timer_work); + &sdata->dfs_cac_timer_work); if (sdata->wdev.cac_started) { chandef = sdata->vif.bss_conf.chanreq.oper;