mirror of
https://github.com/torvalds/linux.git
synced 2024-11-12 07:01:57 +00:00
mac80211: refactor drop connection/unlock in CSA processing
The schedule_work()/mutex unlocking code is duplicated many times, refactor that to a common place in the function. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
dc5a1ad7bd
commit
f3b0bbb35d
@ -1157,11 +1157,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
|
||||
if (!conf) {
|
||||
sdata_info(sdata,
|
||||
"no channel context assigned to vif?, disconnecting\n");
|
||||
ieee80211_queue_work(&local->hw,
|
||||
&ifmgd->csa_connection_drop_work);
|
||||
mutex_unlock(&local->chanctx_mtx);
|
||||
mutex_unlock(&local->mtx);
|
||||
return;
|
||||
goto drop_connection;
|
||||
}
|
||||
|
||||
chanctx = container_of(conf, struct ieee80211_chanctx, conf);
|
||||
@ -1170,11 +1166,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
|
||||
!(local->hw.flags & IEEE80211_HW_CHANCTX_STA_CSA)) {
|
||||
sdata_info(sdata,
|
||||
"driver doesn't support chan-switch with channel contexts\n");
|
||||
ieee80211_queue_work(&local->hw,
|
||||
&ifmgd->csa_connection_drop_work);
|
||||
mutex_unlock(&local->chanctx_mtx);
|
||||
mutex_unlock(&local->mtx);
|
||||
return;
|
||||
goto drop_connection;
|
||||
}
|
||||
|
||||
ch_switch.timestamp = timestamp;
|
||||
@ -1186,11 +1178,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
|
||||
if (drv_pre_channel_switch(sdata, &ch_switch)) {
|
||||
sdata_info(sdata,
|
||||
"preparing for channel switch failed, disconnecting\n");
|
||||
ieee80211_queue_work(&local->hw,
|
||||
&ifmgd->csa_connection_drop_work);
|
||||
mutex_unlock(&local->chanctx_mtx);
|
||||
mutex_unlock(&local->mtx);
|
||||
return;
|
||||
goto drop_connection;
|
||||
}
|
||||
|
||||
res = ieee80211_vif_reserve_chanctx(sdata, &csa_ie.chandef,
|
||||
@ -1199,11 +1187,7 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
|
||||
sdata_info(sdata,
|
||||
"failed to reserve channel context for channel switch, disconnecting (err=%d)\n",
|
||||
res);
|
||||
ieee80211_queue_work(&local->hw,
|
||||
&ifmgd->csa_connection_drop_work);
|
||||
mutex_unlock(&local->chanctx_mtx);
|
||||
mutex_unlock(&local->mtx);
|
||||
return;
|
||||
goto drop_connection;
|
||||
}
|
||||
mutex_unlock(&local->chanctx_mtx);
|
||||
|
||||
@ -1232,6 +1216,11 @@ ieee80211_sta_process_chanswitch(struct ieee80211_sub_if_data *sdata,
|
||||
mod_timer(&ifmgd->chswitch_timer,
|
||||
TU_TO_EXP_TIME((csa_ie.count - 1) *
|
||||
cbss->beacon_interval));
|
||||
return;
|
||||
drop_connection:
|
||||
ieee80211_queue_work(&local->hw, &ifmgd->csa_connection_drop_work);
|
||||
mutex_unlock(&local->chanctx_mtx);
|
||||
mutex_unlock(&local->mtx);
|
||||
}
|
||||
|
||||
static bool
|
||||
|
Loading…
Reference in New Issue
Block a user