mirror of
https://github.com/openwrt/openwrt.git
synced 2025-01-01 11:36:49 +00:00
323e249ce8
This updates mac80211 to version 6.1.97-1. This code is based on Linux 6.1.97 and contains all fixes included in the upstream wireless subsystem from that kernel version. This includes many bugfixes and also some security fixes. The removed patches are already integrated in upstream Linux 6.1.97 or in backports. The following patches were integrated in upstream Linux: ath11k/0013-wifi-ath11k-synchronize-ath11k_mac_he_gi_to_nl80211_.patch ath11k/0035-wifi-ath11k-Use-platform_get_irq-to-get-the-interrup.patch ath11k/0036-wifi-ath11k-fix-SAC-bug-on-peer-addition-with-sta-ba.patch ath11k/0047-wifi-ath11k-fix-deinitialization-of-firmware-resourc.patch ath11k/0053-wifi-ath11k-fix-writing-to-unintended-memory-region.patch ath11k/0060-wifi-ath11k-Ignore-frags-from-uninitialized-peer-in-.patch ath11k/0065-wifi-ath11k-fix-tx-status-reporting-in-encap-offload.patch ath11k/0067-wifi-ath11k-Fix-SKB-corruption-in-REO-destination-ri.patch ath11k/0069-wifi-ath11k-fix-registration-of-6Ghz-only-phy-withou.patch ath11k/0080-wifi-ath11k-add-support-default-regdb-while-searchin.patch ath11k/0085-wifi-ath11k-fix-memory-leak-in-WMI-firmware-stats.patch ath11k/0086-wifi-ath11k-Add-missing-check-for-ioremap.patch ath11k/0096-wifi-ath11k-fix-boot-failure-with-one-MSI-vector.patch subsys/337-wifi-mac80211-fix-race-condition-on-enabling-fast-xm.patch The following patches were integrated in upstream backports: ath11k/901-wifi-ath11k-pci-fix-compilation-in-5.16-and-older.patch build/080-resv_start_op.patch build/110-backport_napi_build_skb.patch The following files are missing in backports, we do not have to remove them any more. Some were already missing before some were removed in this update: include/linux/cordic.h include/linux/crc8.h include/linux/eeprom_93cx6.h include/linux/wl12xx.h include/net/ieee80211.h backport-include/linux/bcm47xx_nvram.h include/linux/ath9k_platform.h include/net/bluetooth/ backports ships a dummy Mediatek wed header for older kernel versions. We backported the feature in our kernel, remove the dummy header: backport-include/linux/soc/mediatek/mtk_wed.h Remove header files for subsystems used form the mainline kernel: include/trace/events/qrtr.h include/net/rsi_91x.h backport-include/linux/platform_data/brcmnand.h Link: https://github.com/openwrt/openwrt/pull/15827 Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
92 lines
3.0 KiB
Diff
92 lines
3.0 KiB
Diff
From: Johannes Berg <johannes.berg@intel.com>
|
|
Date: Mon, 13 Mar 2023 11:53:51 +0100
|
|
Subject: [PATCH] wifi: mac80211: add flush_sta method
|
|
|
|
Some drivers like iwlwifi might have per-STA queues, so we
|
|
may want to flush/drop just those queues rather than all
|
|
when removing a station. Add a separate method for that.
|
|
|
|
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
|
Reviewed-by: Greenman, Gregory <gregory.greenman@intel.com>
|
|
---
|
|
|
|
--- a/include/net/mac80211.h
|
|
+++ b/include/net/mac80211.h
|
|
@@ -3927,6 +3927,10 @@ struct ieee80211_prep_tx_info {
|
|
* Note that vif can be NULL.
|
|
* The callback can sleep.
|
|
*
|
|
+ * @flush_sta: Flush or drop all pending frames from the hardware queue(s) for
|
|
+ * the given station, as it's about to be removed.
|
|
+ * The callback can sleep.
|
|
+ *
|
|
* @channel_switch: Drivers that need (or want) to offload the channel
|
|
* switch operation for CSAs received from the AP may implement this
|
|
* callback. They must then call ieee80211_chswitch_done() to indicate
|
|
@@ -4381,6 +4385,8 @@ struct ieee80211_ops {
|
|
#endif
|
|
void (*flush)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
|
u32 queues, bool drop);
|
|
+ void (*flush_sta)(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
|
|
+ struct ieee80211_sta *sta);
|
|
void (*channel_switch)(struct ieee80211_hw *hw,
|
|
struct ieee80211_vif *vif,
|
|
struct ieee80211_channel_switch *ch_switch);
|
|
--- a/net/mac80211/driver-ops.h
|
|
+++ b/net/mac80211/driver-ops.h
|
|
@@ -617,6 +617,21 @@ static inline void drv_flush(struct ieee
|
|
trace_drv_return_void(local);
|
|
}
|
|
|
|
+static inline void drv_flush_sta(struct ieee80211_local *local,
|
|
+ struct ieee80211_sub_if_data *sdata,
|
|
+ struct sta_info *sta)
|
|
+{
|
|
+ might_sleep();
|
|
+
|
|
+ if (sdata && !check_sdata_in_driver(sdata))
|
|
+ return;
|
|
+
|
|
+ trace_drv_flush_sta(local, sdata, &sta->sta);
|
|
+ if (local->ops->flush_sta)
|
|
+ local->ops->flush_sta(&local->hw, &sdata->vif, &sta->sta);
|
|
+ trace_drv_return_void(local);
|
|
+}
|
|
+
|
|
static inline void drv_channel_switch(struct ieee80211_local *local,
|
|
struct ieee80211_sub_if_data *sdata,
|
|
struct ieee80211_channel_switch *ch_switch)
|
|
--- a/net/mac80211/sta_info.c
|
|
+++ b/net/mac80211/sta_info.c
|
|
@@ -1281,8 +1281,12 @@ static void __sta_info_destroy_part2(str
|
|
* frames sitting on hardware queues might be sent out without
|
|
* any encryption at all.
|
|
*/
|
|
- if (local->ops->set_key)
|
|
- ieee80211_flush_queues(local, sta->sdata, false);
|
|
+ if (local->ops->set_key) {
|
|
+ if (local->ops->flush_sta)
|
|
+ drv_flush_sta(local, sta->sdata, sta);
|
|
+ else
|
|
+ ieee80211_flush_queues(local, sta->sdata, false);
|
|
+ }
|
|
|
|
/* now keys can no longer be reached */
|
|
ieee80211_free_sta_keys(local, sta);
|
|
--- a/net/mac80211/trace.h
|
|
+++ b/net/mac80211/trace.h
|
|
@@ -1177,6 +1177,13 @@ TRACE_EVENT(drv_flush,
|
|
)
|
|
);
|
|
|
|
+DEFINE_EVENT(sta_event, drv_flush_sta,
|
|
+ TP_PROTO(struct ieee80211_local *local,
|
|
+ struct ieee80211_sub_if_data *sdata,
|
|
+ struct ieee80211_sta *sta),
|
|
+ TP_ARGS(local, sdata, sta)
|
|
+);
|
|
+
|
|
TRACE_EVENT(drv_channel_switch,
|
|
TP_PROTO(struct ieee80211_local *local,
|
|
struct ieee80211_sub_if_data *sdata,
|