X-Git-Url: http://git.openwrt.org/?p=openwrt%2Fopenwrt.git;a=blobdiff_plain;f=package%2Fkernel%2Fmac80211%2Fpatches%2Fsubsys%2F317-v5.17-cfg80211-schedule-offchan_cac_abort_wk-in-cfg80211_r.patch;fp=package%2Fkernel%2Fmac80211%2Fpatches%2Fsubsys%2F317-v5.17-cfg80211-schedule-offchan_cac_abort_wk-in-cfg80211_r.patch;h=0000000000000000000000000000000000000000;hp=df7afefb3433ba2bbc7f2f0267e23c56eb312690;hb=8d90b9fef1ef6b01228c6af73cf06ecbe5d0adaf;hpb=b1b29ba98769386f7f88ef66fabc88c79be56b33 diff --git a/package/kernel/mac80211/patches/subsys/317-v5.17-cfg80211-schedule-offchan_cac_abort_wk-in-cfg80211_r.patch b/package/kernel/mac80211/patches/subsys/317-v5.17-cfg80211-schedule-offchan_cac_abort_wk-in-cfg80211_r.patch deleted file mode 100644 index df7afefb34..0000000000 --- a/package/kernel/mac80211/patches/subsys/317-v5.17-cfg80211-schedule-offchan_cac_abort_wk-in-cfg80211_r.patch +++ /dev/null @@ -1,136 +0,0 @@ -From: Lorenzo Bianconi -Date: Tue, 16 Nov 2021 12:41:52 +0100 -Subject: [PATCH] cfg80211: schedule offchan_cac_abort_wk in - cfg80211_radar_event - -If necessary schedule offchan_cac_abort_wk work in cfg80211_radar_event -routine adding offchan parameter to cfg80211_radar_event signature. -Rename cfg80211_radar_event in __cfg80211_radar_event and introduce -the two following inline helpers: -- cfg80211_radar_event -- cfg80211_offchan_radar_event -Doing so the drv will not need to run cfg80211_offchan_cac_abort() after -radar detection on the offchannel chain. - -Tested-by: Owen Peng -Signed-off-by: Lorenzo Bianconi -Link: https://lore.kernel.org/r/3ff583e021e3343a3ced54a7b09b5e184d1880dc.1637062727.git.lorenzo@kernel.org -Signed-off-by: Johannes Berg ---- - ---- a/include/net/cfg80211.h -+++ b/include/net/cfg80211.h -@@ -7580,15 +7580,33 @@ void cfg80211_cqm_txe_notify(struct net_ - void cfg80211_cqm_beacon_loss_notify(struct net_device *dev, gfp_t gfp); - - /** -- * cfg80211_radar_event - radar detection event -+ * __cfg80211_radar_event - radar detection event - * @wiphy: the wiphy - * @chandef: chandef for the current channel -+ * @offchan: the radar has been detected on the offchannel chain - * @gfp: context flags - * - * This function is called when a radar is detected on the current chanenl. - */ --void cfg80211_radar_event(struct wiphy *wiphy, -- struct cfg80211_chan_def *chandef, gfp_t gfp); -+void __cfg80211_radar_event(struct wiphy *wiphy, -+ struct cfg80211_chan_def *chandef, -+ bool offchan, gfp_t gfp); -+ -+static inline void -+cfg80211_radar_event(struct wiphy *wiphy, -+ struct cfg80211_chan_def *chandef, -+ gfp_t gfp) -+{ -+ __cfg80211_radar_event(wiphy, chandef, false, gfp); -+} -+ -+static inline void -+cfg80211_offchan_radar_event(struct wiphy *wiphy, -+ struct cfg80211_chan_def *chandef, -+ gfp_t gfp) -+{ -+ __cfg80211_radar_event(wiphy, chandef, true, gfp); -+} - - /** - * cfg80211_sta_opmode_change_notify - STA's ht/vht operation mode change event ---- a/net/wireless/mlme.c -+++ b/net/wireless/mlme.c -@@ -905,13 +905,13 @@ void cfg80211_dfs_channels_update_work(s - } - - --void cfg80211_radar_event(struct wiphy *wiphy, -- struct cfg80211_chan_def *chandef, -- gfp_t gfp) -+void __cfg80211_radar_event(struct wiphy *wiphy, -+ struct cfg80211_chan_def *chandef, -+ bool offchan, gfp_t gfp) - { - struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy); - -- trace_cfg80211_radar_event(wiphy, chandef); -+ trace_cfg80211_radar_event(wiphy, chandef, offchan); - - /* only set the chandef supplied channel to unavailable, in - * case the radar is detected on only one of multiple channels -@@ -919,6 +919,9 @@ void cfg80211_radar_event(struct wiphy * - */ - cfg80211_set_dfs_state(wiphy, chandef, NL80211_DFS_UNAVAILABLE); - -+ if (offchan) -+ queue_work(cfg80211_wq, &rdev->offchan_cac_abort_wk); -+ - cfg80211_sched_dfs_chan_update(rdev); - - nl80211_radar_notify(rdev, chandef, NL80211_RADAR_DETECTED, NULL, gfp); -@@ -926,7 +929,7 @@ void cfg80211_radar_event(struct wiphy * - memcpy(&rdev->radar_chandef, chandef, sizeof(struct cfg80211_chan_def)); - queue_work(cfg80211_wq, &rdev->propagate_radar_detect_wk); - } --EXPORT_SYMBOL(cfg80211_radar_event); -+EXPORT_SYMBOL(__cfg80211_radar_event); - - void cfg80211_cac_event(struct net_device *netdev, - const struct cfg80211_chan_def *chandef, -@@ -998,7 +1001,8 @@ __cfg80211_offchan_cac_event(struct cfg8 - rdev->offchan_radar_wdev = NULL; - break; - case NL80211_RADAR_CAC_ABORTED: -- cancel_delayed_work(&rdev->offchan_cac_done_wk); -+ if (!cancel_delayed_work(&rdev->offchan_cac_done_wk)) -+ return; - wdev = rdev->offchan_radar_wdev; - rdev->offchan_radar_wdev = NULL; - break; ---- a/net/wireless/trace.h -+++ b/net/wireless/trace.h -@@ -3022,18 +3022,21 @@ TRACE_EVENT(cfg80211_ch_switch_started_n - ); - - TRACE_EVENT(cfg80211_radar_event, -- TP_PROTO(struct wiphy *wiphy, struct cfg80211_chan_def *chandef), -- TP_ARGS(wiphy, chandef), -+ TP_PROTO(struct wiphy *wiphy, struct cfg80211_chan_def *chandef, -+ bool offchan), -+ TP_ARGS(wiphy, chandef, offchan), - TP_STRUCT__entry( - WIPHY_ENTRY - CHAN_DEF_ENTRY -+ __field(bool, offchan) - ), - TP_fast_assign( - WIPHY_ASSIGN; - CHAN_DEF_ASSIGN(chandef); -+ __entry->offchan = offchan; - ), -- TP_printk(WIPHY_PR_FMT ", " CHAN_DEF_PR_FMT, -- WIPHY_PR_ARG, CHAN_DEF_PR_ARG) -+ TP_printk(WIPHY_PR_FMT ", " CHAN_DEF_PR_FMT ", offchan %d", -+ WIPHY_PR_ARG, CHAN_DEF_PR_ARG, __entry->offchan) - ); - - TRACE_EVENT(cfg80211_cac_event,