Skip to content

Commit

Permalink
wifi: mac80211: move radar detect work to sdata
Browse files Browse the repository at this point in the history
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.

Reviewed-by: Miriam Rachel Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://msgid.link/20240506211311.43bd82c6da04.Ib39bec3aa198d137385f081e7e1910dcbde3aa1b@changeid
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
  • Loading branch information
Johannes Berg committed May 23, 2024
1 parent 48443a4 commit ce9e660
Show file tree
Hide file tree
Showing 6 changed files with 13 additions and 13 deletions.
6 changes: 3 additions & 3 deletions net/mac80211/cfg.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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:
Expand All @@ -3483,7 +3483,7 @@ static void ieee80211_end_cac(struct wiphy *wiphy,

list_for_each_entry(sdata, &local->interfaces, list) {
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);
Expand Down
3 changes: 2 additions & 1 deletion net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -1060,7 +1060,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;
Expand Down Expand Up @@ -1159,6 +1158,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;
Expand Down
4 changes: 3 additions & 1 deletion net/mac80211/iface.c
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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:
Expand Down
2 changes: 0 additions & 2 deletions net/mac80211/link.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
9 changes: 4 additions & 5 deletions net/mac80211/mlme.c
Original file line number Diff line number Diff line change
Expand Up @@ -2797,16 +2797,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);
Expand Down
2 changes: 1 addition & 1 deletion net/mac80211/util.c
Original file line number Diff line number Diff line change
Expand Up @@ -3457,7 +3457,7 @@ void ieee80211_dfs_cac_cancel(struct ieee80211_local *local)

list_for_each_entry(sdata, &local->interfaces, list) {
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;
Expand Down

0 comments on commit ce9e660

Please sign in to comment.