diff options
Diffstat (limited to 'package/kernel/mac80211/patches')
52 files changed, 173 insertions, 1446 deletions
diff --git a/package/kernel/mac80211/patches/ath/404-regd_no_assoc_hints.patch b/package/kernel/mac80211/patches/ath/404-regd_no_assoc_hints.patch index 020e2bbab5..646389a353 100644 --- a/package/kernel/mac80211/patches/ath/404-regd_no_assoc_hints.patch +++ b/package/kernel/mac80211/patches/ath/404-regd_no_assoc_hints.patch @@ -1,6 +1,6 @@ --- a/net/wireless/reg.c +++ b/net/wireless/reg.c -@@ -3045,6 +3045,8 @@ void regulatory_hint_country_ie(struct w +@@ -3047,6 +3047,8 @@ void regulatory_hint_country_ie(struct w enum environment_cap env = ENVIRON_ANY; struct regulatory_request *request = NULL, *lr; @@ -9,7 +9,7 @@ /* IE len must be evenly divisible by 2 */ if (country_ie_len & 0x01) return; -@@ -3296,6 +3298,7 @@ static bool is_wiphy_all_set_reg_flag(en +@@ -3298,6 +3300,7 @@ static bool is_wiphy_all_set_reg_flag(en void regulatory_hint_disconnect(void) { diff --git a/package/kernel/mac80211/patches/ath/930-ath10k_add_tpt_led_trigger.patch b/package/kernel/mac80211/patches/ath/930-ath10k_add_tpt_led_trigger.patch index 2b36a559d6..0abd66f85e 100644 --- a/package/kernel/mac80211/patches/ath/930-ath10k_add_tpt_led_trigger.patch +++ b/package/kernel/mac80211/patches/ath/930-ath10k_add_tpt_led_trigger.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c -@@ -9053,6 +9053,21 @@ static int ath10k_mac_init_rd(struct ath +@@ -9049,6 +9049,21 @@ static int ath10k_mac_init_rd(struct ath return 0; } @@ -22,7 +22,7 @@ int ath10k_mac_register(struct ath10k *ar) { static const u32 cipher_suites[] = { -@@ -9380,6 +9395,12 @@ int ath10k_mac_register(struct ath10k *a +@@ -9376,6 +9391,12 @@ int ath10k_mac_register(struct ath10k *a ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER; diff --git a/package/kernel/mac80211/patches/ath/975-ath10k-use-tpt-trigger-by-default.patch b/package/kernel/mac80211/patches/ath/975-ath10k-use-tpt-trigger-by-default.patch index db9a88e000..dbd3be79e1 100644 --- a/package/kernel/mac80211/patches/ath/975-ath10k-use-tpt-trigger-by-default.patch +++ b/package/kernel/mac80211/patches/ath/975-ath10k-use-tpt-trigger-by-default.patch @@ -42,7 +42,7 @@ Signed-off-by: Mathias Kresin <dev@kresin.me> if (ret) --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c -@@ -9397,7 +9397,7 @@ int ath10k_mac_register(struct ath10k *a +@@ -9393,7 +9393,7 @@ int ath10k_mac_register(struct ath10k *a ar->hw->weight_multiplier = ATH10K_AIRTIME_WEIGHT_MULTIPLIER; #ifdef CPTCFG_MAC80211_LEDS diff --git a/package/kernel/mac80211/patches/ath/980-ath10k-fix-max-antenna-gain-unit.patch b/package/kernel/mac80211/patches/ath/980-ath10k-fix-max-antenna-gain-unit.patch index 9498e02462..4c1963b828 100644 --- a/package/kernel/mac80211/patches/ath/980-ath10k-fix-max-antenna-gain-unit.patch +++ b/package/kernel/mac80211/patches/ath/980-ath10k-fix-max-antenna-gain-unit.patch @@ -20,7 +20,7 @@ Forwarded: https://patchwork.kernel.org/patch/10986723/ --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c -@@ -1043,7 +1043,7 @@ static int ath10k_monitor_vdev_start(str +@@ -1038,7 +1038,7 @@ static int ath10k_monitor_vdev_start(str arg.channel.min_power = 0; arg.channel.max_power = channel->max_power * 2; arg.channel.max_reg_power = channel->max_reg_power * 2; @@ -29,7 +29,7 @@ Forwarded: https://patchwork.kernel.org/patch/10986723/ reinit_completion(&ar->vdev_setup_done); reinit_completion(&ar->vdev_delete_done); -@@ -1489,7 +1489,7 @@ static int ath10k_vdev_start_restart(str +@@ -1484,7 +1484,7 @@ static int ath10k_vdev_start_restart(str arg.channel.min_power = 0; arg.channel.max_power = chandef->chan->max_power * 2; arg.channel.max_reg_power = chandef->chan->max_reg_power * 2; @@ -38,7 +38,7 @@ Forwarded: https://patchwork.kernel.org/patch/10986723/ if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { arg.ssid = arvif->u.ap.ssid; -@@ -3194,7 +3194,7 @@ static int ath10k_update_channel_list(st +@@ -3189,7 +3189,7 @@ static int ath10k_update_channel_list(st ch->min_power = 0; ch->max_power = channel->max_power * 2; ch->max_reg_power = channel->max_reg_power * 2; diff --git a/package/kernel/mac80211/patches/ath/981-ath10k-adjust-tx-power-reduction-for-US-regulatory-d.patch b/package/kernel/mac80211/patches/ath/981-ath10k-adjust-tx-power-reduction-for-US-regulatory-d.patch index fbb6fad660..ace2fd5481 100644 --- a/package/kernel/mac80211/patches/ath/981-ath10k-adjust-tx-power-reduction-for-US-regulatory-d.patch +++ b/package/kernel/mac80211/patches/ath/981-ath10k-adjust-tx-power-reduction-for-US-regulatory-d.patch @@ -28,7 +28,7 @@ Forwarded: no --- a/drivers/net/wireless/ath/ath10k/mac.c +++ b/drivers/net/wireless/ath/ath10k/mac.c -@@ -1011,6 +1011,40 @@ static inline int ath10k_vdev_setup_sync +@@ -1006,6 +1006,40 @@ static inline int ath10k_vdev_setup_sync return ar->last_wmi_vdev_start_status; } @@ -69,7 +69,7 @@ Forwarded: no static int ath10k_monitor_vdev_start(struct ath10k *ar, int vdev_id) { struct cfg80211_chan_def *chandef = NULL; -@@ -1043,7 +1077,8 @@ static int ath10k_monitor_vdev_start(str +@@ -1038,7 +1072,8 @@ static int ath10k_monitor_vdev_start(str arg.channel.min_power = 0; arg.channel.max_power = channel->max_power * 2; arg.channel.max_reg_power = channel->max_reg_power * 2; @@ -79,7 +79,7 @@ Forwarded: no reinit_completion(&ar->vdev_setup_done); reinit_completion(&ar->vdev_delete_done); -@@ -1489,7 +1524,8 @@ static int ath10k_vdev_start_restart(str +@@ -1484,7 +1519,8 @@ static int ath10k_vdev_start_restart(str arg.channel.min_power = 0; arg.channel.max_power = chandef->chan->max_power * 2; arg.channel.max_reg_power = chandef->chan->max_reg_power * 2; @@ -89,7 +89,7 @@ Forwarded: no if (arvif->vdev_type == WMI_VDEV_TYPE_AP) { arg.ssid = arvif->u.ap.ssid; -@@ -3194,7 +3230,8 @@ static int ath10k_update_channel_list(st +@@ -3189,7 +3225,8 @@ static int ath10k_update_channel_list(st ch->min_power = 0; ch->max_power = channel->max_power * 2; ch->max_reg_power = channel->max_reg_power * 2; diff --git a/package/kernel/mac80211/patches/brcm/860-brcmfmac-register-wiphy-s-during-module_init.patch b/package/kernel/mac80211/patches/brcm/860-brcmfmac-register-wiphy-s-during-module_init.patch index 1b965087d3..c18a5bfa4a 100644 --- a/package/kernel/mac80211/patches/brcm/860-brcmfmac-register-wiphy-s-during-module_init.patch +++ b/package/kernel/mac80211/patches/brcm/860-brcmfmac-register-wiphy-s-during-module_init.patch @@ -13,7 +13,7 @@ Signed-off-by: Rafał Miłecki <zajec5@gmail.com> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c -@@ -1551,6 +1551,7 @@ int __init brcmf_core_init(void) +@@ -1554,6 +1554,7 @@ int __init brcmf_core_init(void) { if (!schedule_work(&brcmf_driver_work)) return -EBUSY; diff --git a/package/kernel/mac80211/patches/brcm/862-brcmfmac-Disable-power-management.patch b/package/kernel/mac80211/patches/brcm/862-brcmfmac-Disable-power-management.patch index 91bf464ede..bf8343790d 100644 --- a/package/kernel/mac80211/patches/brcm/862-brcmfmac-Disable-power-management.patch +++ b/package/kernel/mac80211/patches/brcm/862-brcmfmac-Disable-power-management.patch @@ -14,7 +14,7 @@ Signed-off-by: Phil Elwell <phil@raspberrypi.org> --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -@@ -2955,6 +2955,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip +@@ -2956,6 +2956,10 @@ brcmf_cfg80211_set_power_mgmt(struct wip * preference in cfg struct to apply this to * FW later while initializing the dongle */ diff --git a/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch b/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch index 2613171a86..9658bda1c1 100644 --- a/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch +++ b/package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch @@ -49,7 +49,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl> void brcmf_of_probe(struct device *dev, enum brcmf_bus_type bus_type, struct brcmf_mp_device *settings) { -@@ -30,6 +60,8 @@ void brcmf_of_probe(struct device *dev, +@@ -43,6 +73,8 @@ void brcmf_of_probe(struct device *dev, of_node_put(root); } diff --git a/package/kernel/mac80211/patches/brcm/998-survey.patch b/package/kernel/mac80211/patches/brcm/998-survey.patch index 7feca97e9f..1c5255cce0 100644 --- a/package/kernel/mac80211/patches/brcm/998-survey.patch +++ b/package/kernel/mac80211/patches/brcm/998-survey.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c -@@ -2907,6 +2907,63 @@ done: +@@ -2908,6 +2908,63 @@ done: } static int @@ -64,7 +64,7 @@ brcmf_cfg80211_dump_station(struct wiphy *wiphy, struct net_device *ndev, int idx, u8 *mac, struct station_info *sinfo) { -@@ -3002,6 +3059,7 @@ static s32 brcmf_inform_single_bss(struc +@@ -3003,6 +3060,7 @@ static s32 brcmf_inform_single_bss(struc struct brcmu_chan ch; u16 channel; u32 freq; @@ -72,7 +72,7 @@ u16 notify_capability; u16 notify_interval; u8 *notify_ie; -@@ -3026,6 +3084,17 @@ static s32 brcmf_inform_single_bss(struc +@@ -3027,6 +3085,17 @@ static s32 brcmf_inform_single_bss(struc band = NL80211_BAND_5GHZ; freq = ieee80211_channel_to_frequency(channel, band); @@ -90,7 +90,7 @@ bss_data.chan = ieee80211_get_channel(wiphy, freq); bss_data.scan_width = NL80211_BSS_CHAN_WIDTH_20; bss_data.boottime_ns = ktime_to_ns(ktime_get_boottime()); -@@ -5478,6 +5547,7 @@ static struct cfg80211_ops brcmf_cfg8021 +@@ -5481,6 +5550,7 @@ static struct cfg80211_ops brcmf_cfg8021 .leave_ibss = brcmf_cfg80211_leave_ibss, .get_station = brcmf_cfg80211_get_station, .dump_station = brcmf_cfg80211_dump_station, @@ -100,7 +100,7 @@ .add_key = brcmf_cfg80211_add_key, --- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c +++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/core.c -@@ -1349,6 +1349,8 @@ int brcmf_attach(struct device *dev) +@@ -1352,6 +1352,8 @@ int brcmf_attach(struct device *dev) /* Link to bus module */ drvr->hdrlen = 0; @@ -109,7 +109,7 @@ /* Attach and link in the protocol */ ret = brcmf_proto_attach(drvr); -@@ -1431,6 +1433,12 @@ void brcmf_detach(struct device *dev) +@@ -1434,6 +1436,12 @@ void brcmf_detach(struct device *dev) if (drvr == NULL) return; diff --git a/package/kernel/mac80211/patches/build/015-ipw200-mtu.patch b/package/kernel/mac80211/patches/build/015-ipw200-mtu.patch index 68db4f72d3..f80fda4360 100644 --- a/package/kernel/mac80211/patches/build/015-ipw200-mtu.patch +++ b/package/kernel/mac80211/patches/build/015-ipw200-mtu.patch @@ -1,6 +1,6 @@ --- a/drivers/net/wireless/intel/ipw2x00/ipw2200.c +++ b/drivers/net/wireless/intel/ipw2x00/ipw2200.c -@@ -11470,6 +11470,15 @@ static const struct attribute_group ipw_ +@@ -11472,6 +11472,15 @@ static const struct attribute_group ipw_ .attrs = ipw_sysfs_entries, }; @@ -16,7 +16,7 @@ #ifdef CPTCFG_IPW2200_PROMISCUOUS static int ipw_prom_open(struct net_device *dev) { -@@ -11518,15 +11527,6 @@ static netdev_tx_t ipw_prom_hard_start_x +@@ -11520,15 +11529,6 @@ static netdev_tx_t ipw_prom_hard_start_x return NETDEV_TX_OK; } diff --git a/package/kernel/mac80211/patches/build/060-no_local_ssb_bcma.patch b/package/kernel/mac80211/patches/build/060-no_local_ssb_bcma.patch index c00ab7c786..1958ddad7d 100644 --- a/package/kernel/mac80211/patches/build/060-no_local_ssb_bcma.patch +++ b/package/kernel/mac80211/patches/build/060-no_local_ssb_bcma.patch @@ -1,6 +1,6 @@ --- a/local-symbols +++ b/local-symbols -@@ -424,43 +424,6 @@ USB_SIERRA_NET= +@@ -435,43 +435,6 @@ USB_SIERRA_NET= USB_VL600= USB_NET_CH9200= USB_NET_AQC111= @@ -160,8 +160,8 @@ gpiodev = bus->chipco.dev ? : pcidev; --- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/led.h +++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/led.h -@@ -22,7 +22,7 @@ struct brcms_led { - bool active_low; +@@ -24,7 +24,7 @@ struct brcms_led { + struct gpio_desc *gpiod; }; -#ifdef CPTCFG_BCMA_DRIVER_GPIO @@ -192,7 +192,7 @@ select BRCMUTIL --- a/Kconfig.local +++ b/Kconfig.local -@@ -1276,117 +1276,6 @@ config BACKPORTED_USB_NET_CH9200 +@@ -1309,117 +1309,6 @@ config BACKPORTED_USB_NET_CH9200 config BACKPORTED_USB_NET_AQC111 tristate default USB_NET_AQC111 diff --git a/package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch b/package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch index da76b34fab..b6934d3954 100644 --- a/package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch +++ b/package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch @@ -1,6 +1,6 @@ --- a/local-symbols +++ b/local-symbols -@@ -321,6 +321,7 @@ RT2X00_LIB_FIRMWARE= +@@ -330,6 +330,7 @@ RT2X00_LIB_FIRMWARE= RT2X00_LIB_CRYPTO= RT2X00_LIB_LEDS= RT2X00_LIB_DEBUGFS= diff --git a/package/kernel/mac80211/patches/subsys/070-backports-add-netif_receive_skb_list.patch b/package/kernel/mac80211/patches/subsys/070-backports-add-netif_receive_skb_list.patch deleted file mode 100644 index b26a6bc389..0000000000 --- a/package/kernel/mac80211/patches/subsys/070-backports-add-netif_receive_skb_list.patch +++ /dev/null @@ -1,30 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Fri, 14 Aug 2020 16:13:45 +0200 -Subject: [PATCH] backports: add netif_receive_skb_list - -It will be needed by pending mac80211 changes - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/backport-include/linux/netdevice.h -+++ b/backport-include/linux/netdevice.h -@@ -372,6 +372,18 @@ static inline int _bp_netdev_upper_dev_l - macro_dispatcher(netdev_upper_dev_link, __VA_ARGS__)(__VA_ARGS__) - #endif - -+#if LINUX_VERSION_IS_LESS(4,19,0) -+static inline void netif_receive_skb_list(struct list_head *head) -+{ -+ struct sk_buff *skb, *next; -+ -+ list_for_each_entry_safe(skb, next, head, list) { -+ skb_list_del_init(skb); -+ netif_receive_skb(skb); -+ } -+} -+#endif -+ - #if LINUX_VERSION_IS_LESS(5,0,0) - static inline int backport_dev_open(struct net_device *dev, struct netlink_ext_ack *extack) - { diff --git a/package/kernel/mac80211/patches/subsys/071-backports-add-skb_list_del_init.patch b/package/kernel/mac80211/patches/subsys/071-backports-add-skb_list_del_init.patch deleted file mode 100644 index ee7e63498a..0000000000 --- a/package/kernel/mac80211/patches/subsys/071-backports-add-skb_list_del_init.patch +++ /dev/null @@ -1,24 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Fri, 14 Aug 2020 16:13:55 +0200 -Subject: [PATCH] backports: add skb_list_del_init - -It will be needed by pending mac80211 changes - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/backport-include/linux/skbuff.h -+++ b/backport-include/linux/skbuff.h -@@ -384,6 +384,12 @@ static inline void skb_mark_not_on_list( - { - skb->next = NULL; - } -+ -+static inline void skb_list_del_init(struct sk_buff *skb) -+{ -+ __list_del_entry(&skb->list); -+ skb_mark_not_on_list(skb); -+} - #endif /* 4.19.10 <= x < 4.20 */ - #endif - diff --git a/package/kernel/mac80211/patches/subsys/072-backports-add-sched_set_fifo_low.patch b/package/kernel/mac80211/patches/subsys/072-backports-add-sched_set_fifo_low.patch deleted file mode 100644 index 9b266ffcb3..0000000000 --- a/package/kernel/mac80211/patches/subsys/072-backports-add-sched_set_fifo_low.patch +++ /dev/null @@ -1,32 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Mon, 28 Sep 2020 08:35:28 +0200 -Subject: [PATCH] backports: add sched_set_fifo_low - -It is needed for mt76 - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - create mode 100644 backport/backport-include/linux/sched.h - ---- /dev/null -+++ b/backport-include/linux/sched.h -@@ -0,0 +1,19 @@ -+#ifndef __BACKPORT_LINUX_SCHED_H -+#define __BACKPORT_LINUX_SCHED_H -+ -+#include_next <linux/sched.h> -+#include <linux/version.h> -+ -+#if LINUX_VERSION_IS_LESS(5,9,0) -+#include <uapi/linux/sched/types.h> -+ -+static inline void sched_set_fifo_low(struct task_struct *p) -+{ -+ struct sched_param sparam = {.sched_priority = 1}; -+ -+ sched_setscheduler(p, SCHED_FIFO, &sparam); -+} -+ -+#endif -+ -+#endif diff --git a/package/kernel/mac80211/patches/subsys/073-backports-backport-tasklet_setup-from_tasklet.patch b/package/kernel/mac80211/patches/subsys/073-backports-backport-tasklet_setup-from_tasklet.patch deleted file mode 100644 index 486d10ea58..0000000000 --- a/package/kernel/mac80211/patches/subsys/073-backports-backport-tasklet_setup-from_tasklet.patch +++ /dev/null @@ -1,35 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Wed, 11 Nov 2020 13:34:26 +0100 -Subject: [PATCH] backports: backport tasklet_setup, from_tasklet - -Backport the new tasklet API - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/backport-include/linux/interrupt.h -+++ b/backport-include/linux/interrupt.h -@@ -31,6 +31,23 @@ static inline void backport_hrtimer_star - hrtimer_start(timer, _time, mode); - } - #define hrtimer_start LINUX_BACKPORT(hrtimer_start) -+ -+#endif -+ -+#if LINUX_VERSION_IS_LESS(5,9,0) -+ -+static inline void -+tasklet_setup(struct tasklet_struct *t, -+ void (*callback)(struct tasklet_struct *)) -+{ -+ void (*cb)(unsigned long data) = (void *)callback; -+ -+ tasklet_init(t, cb, (unsigned long)t); -+} -+ -+#define from_tasklet(var, callback_tasklet, tasklet_fieldname) \ -+ container_of(callback_tasklet, typeof(*var), tasklet_fieldname) -+ - #endif - - #endif /* _BP_LINUX_INTERRUPT_H */ diff --git a/package/kernel/mac80211/patches/subsys/100-remove-cryptoapi-dependencies.patch b/package/kernel/mac80211/patches/subsys/100-remove-cryptoapi-dependencies.patch index a94f9d8fdb..3c699dc648 100644 --- a/package/kernel/mac80211/patches/subsys/100-remove-cryptoapi-dependencies.patch +++ b/package/kernel/mac80211/patches/subsys/100-remove-cryptoapi-dependencies.patch @@ -64,7 +64,7 @@ - aead_request_set_ad(aead_req, sg[0].length); - - crypto_aead_encrypt(aead_req); -- kzfree(aead_req); +- kfree_sensitive(aead_req); - - return 0; -} @@ -99,7 +99,7 @@ - aead_request_set_ad(aead_req, sg[0].length); - - err = crypto_aead_decrypt(aead_req); -- kzfree(aead_req); +- kfree_sensitive(aead_req); - - return err; -} diff --git a/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch b/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch index 2333ca2dad..0033837ce7 100644 --- a/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch +++ b/package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch @@ -2,7 +2,7 @@ Used for AP+STA support in OpenWrt - preserve AP mode keys across STA reconnects --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -1198,7 +1198,6 @@ static int ieee80211_stop_ap(struct wiph +@@ -1200,7 +1200,6 @@ static int ieee80211_stop_ap(struct wiph sdata->vif.bss_conf.ftmr_params = NULL; __sta_info_flush(sdata, true); diff --git a/package/kernel/mac80211/patches/subsys/210-ap_scan.patch b/package/kernel/mac80211/patches/subsys/210-ap_scan.patch index fccb1ebffa..c7da15fffc 100644 --- a/package/kernel/mac80211/patches/subsys/210-ap_scan.patch +++ b/package/kernel/mac80211/patches/subsys/210-ap_scan.patch @@ -1,6 +1,6 @@ --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -2346,7 +2346,7 @@ static int ieee80211_scan(struct wiphy * +@@ -2353,7 +2353,7 @@ static int ieee80211_scan(struct wiphy * * the frames sent while scanning on other channel will be * lost) */ diff --git a/package/kernel/mac80211/patches/subsys/300-mac80211-optimize-skb-resizing.patch b/package/kernel/mac80211/patches/subsys/300-mac80211-optimize-skb-resizing.patch deleted file mode 100644 index cb70670e52..0000000000 --- a/package/kernel/mac80211/patches/subsys/300-mac80211-optimize-skb-resizing.patch +++ /dev/null @@ -1,201 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Sun, 17 Mar 2019 18:11:30 +0100 -Subject: [PATCH] mac80211: optimize skb resizing - -When forwarding unicast packets from ethernet to batman-adv over 802.11s -(with forwarding disabled), the typical required headroom to transmit -encrypted packets on mt76 is 32 (802.11) + 6 (802.11s) + 8 (CCMP) + -2 (padding) + 6 (LLC) + 18 (batman-adv) - 14 (old ethernet header) = 58 bytes. - -On systems where NET_SKB_PAD is 64 this leads to a call to pskb_expand_head -for every packet, since mac80211 also tries to allocate 16 bytes status -headroom for radiotap headers. - -This patch fixes these unnecessary reallocations by only requiring the extra -status headroom in ieee80211_tx_monitor() -If however a reallocation happens before that call, the status headroom gets -added there as well, in order to avoid double reallocation. - -The patch also cleans up the code by moving the headroom calculation to -ieee80211_skb_resize. - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/ieee80211_i.h -+++ b/net/mac80211/ieee80211_i.h -@@ -1809,6 +1809,9 @@ int ieee80211_tx_control_port(struct wip - u64 *cookie); - int ieee80211_probe_mesh_link(struct wiphy *wiphy, struct net_device *dev, - const u8 *buf, size_t len); -+int ieee80211_skb_resize(struct ieee80211_local *local, -+ struct ieee80211_sub_if_data *sdata, -+ struct sk_buff *skb, int hdrlen, int hdr_add); - - /* HT */ - void ieee80211_apply_htcap_overrides(struct ieee80211_sub_if_data *sdata, ---- a/net/mac80211/status.c -+++ b/net/mac80211/status.c -@@ -846,6 +846,11 @@ void ieee80211_tx_monitor(struct ieee802 - struct net_device *prev_dev = NULL; - int rtap_len; - -+ if (ieee80211_skb_resize(local, NULL, skb, 0, 0)) { -+ dev_kfree_skb(skb); -+ return; -+ } -+ - /* send frame to monitor interfaces now */ - rtap_len = ieee80211_tx_radiotap_len(info, status); - if (WARN_ON_ONCE(skb_headroom(skb) < rtap_len)) { ---- a/net/mac80211/tx.c -+++ b/net/mac80211/tx.c -@@ -1937,37 +1937,53 @@ static bool ieee80211_tx(struct ieee8021 - } - - /* device xmit handlers */ -- --static int ieee80211_skb_resize(struct ieee80211_sub_if_data *sdata, -- struct sk_buff *skb, -- int head_need, bool may_encrypt) -+int ieee80211_skb_resize(struct ieee80211_local *local, -+ struct ieee80211_sub_if_data *sdata, -+ struct sk_buff *skb, int hdr_len, int hdr_extra) - { -- struct ieee80211_local *local = sdata->local; -+ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr; -- bool enc_tailroom; -- int tail_need = 0; -- -- hdr = (struct ieee80211_hdr *) skb->data; -- enc_tailroom = may_encrypt && -- (sdata->crypto_tx_tailroom_needed_cnt || -- ieee80211_is_mgmt(hdr->frame_control)); -- -- if (enc_tailroom) { -- tail_need = IEEE80211_ENCRYPT_TAILROOM; -- tail_need -= skb_tailroom(skb); -- tail_need = max_t(int, tail_need, 0); -+ int head_need, head_max; -+ int tail_need, tail_max; -+ bool enc_tailroom = false; -+ -+ if (sdata && !hdr_len && -+ !(info->flags & IEEE80211_TX_INTFL_DONT_ENCRYPT)) { -+ hdr = (struct ieee80211_hdr *) skb->data; -+ enc_tailroom = (sdata->crypto_tx_tailroom_needed_cnt || -+ ieee80211_is_mgmt(hdr->frame_control)); -+ hdr_len += sdata->encrypt_headroom; -+ } -+ -+ head_need = head_max = hdr_len; -+ tail_need = tail_max = 0; -+ if (!sdata) { -+ head_need = head_max = local->tx_headroom; -+ } else { -+ head_max += hdr_extra; -+ head_max += max_t(int, local->tx_headroom, -+ local->hw.extra_tx_headroom); -+ head_need += local->hw.extra_tx_headroom; -+ -+ tail_max = IEEE80211_ENCRYPT_TAILROOM; -+ if (enc_tailroom) -+ tail_need = tail_max; - } - - if (skb_cloned(skb) && - (!ieee80211_hw_check(&local->hw, SUPPORTS_CLONED_SKBS) || - !skb_clone_writable(skb, ETH_HLEN) || enc_tailroom)) - I802_DEBUG_INC(local->tx_expand_skb_head_cloned); -- else if (head_need || tail_need) -+ else if (head_need > skb_headroom(skb) || -+ tail_need > skb_tailroom(skb)) - I802_DEBUG_INC(local->tx_expand_skb_head); - else - return 0; - -- if (pskb_expand_head(skb, head_need, tail_need, GFP_ATOMIC)) { -+ head_max = max_t(int, 0, head_max - skb_headroom(skb)); -+ tail_max = max_t(int, 0, tail_max - skb_tailroom(skb)); -+ -+ if (pskb_expand_head(skb, head_max, tail_max, GFP_ATOMIC)) { - wiphy_debug(local->hw.wiphy, - "failed to reallocate TX buffer\n"); - return -ENOMEM; -@@ -1983,18 +1999,8 @@ void ieee80211_xmit(struct ieee80211_sub - struct ieee80211_local *local = sdata->local; - struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr; -- int headroom; -- bool may_encrypt; -- -- may_encrypt = !(info->flags & IEEE80211_TX_INTFL_DONT_ENCRYPT); - -- headroom = local->tx_headroom; -- if (may_encrypt) -- headroom += sdata->encrypt_headroom; -- headroom -= skb_headroom(skb); -- headroom = max_t(int, 0, headroom); -- -- if (ieee80211_skb_resize(sdata, skb, headroom, may_encrypt)) { -+ if (ieee80211_skb_resize(local, sdata, skb, 0, 0)) { - ieee80211_free_txskb(&local->hw, skb); - return; - } -@@ -2809,29 +2815,13 @@ static struct sk_buff *ieee80211_build_h - } - - skb_pull(skb, skip_header_bytes); -- head_need = hdrlen + encaps_len + meshhdrlen - skb_headroom(skb); -+ head_need = hdrlen + encaps_len + meshhdrlen; - -- /* -- * So we need to modify the skb header and hence need a copy of -- * that. The head_need variable above doesn't, so far, include -- * the needed header space that we don't need right away. If we -- * can, then we don't reallocate right now but only after the -- * frame arrives at the master device (if it does...) -- * -- * If we cannot, however, then we will reallocate to include all -- * the ever needed space. Also, if we need to reallocate it anyway, -- * make it big enough for everything we may ever need. -- */ -- -- if (head_need > 0 || skb_cloned(skb)) { -- head_need += sdata->encrypt_headroom; -- head_need += local->tx_headroom; -- head_need = max_t(int, 0, head_need); -- if (ieee80211_skb_resize(sdata, skb, head_need, true)) { -- ieee80211_free_txskb(&local->hw, skb); -- skb = NULL; -- return ERR_PTR(-ENOMEM); -- } -+ if (ieee80211_skb_resize(local, sdata, skb, head_need, -+ sdata->encrypt_headroom)) { -+ ieee80211_free_txskb(&local->hw, skb); -+ skb = NULL; -+ return ERR_PTR(-ENOMEM); - } - - if (encaps_data) -@@ -3446,7 +3436,6 @@ static bool ieee80211_xmit_fast(struct i - struct ieee80211_local *local = sdata->local; - u16 ethertype = (skb->data[12] << 8) | skb->data[13]; - int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2); -- int hw_headroom = sdata->local->hw.extra_tx_headroom; - struct ethhdr eth; - struct ieee80211_tx_info *info; - struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; -@@ -3498,10 +3487,7 @@ static bool ieee80211_xmit_fast(struct i - * as the may-encrypt argument for the resize to not account for - * more room than we already have in 'extra_head' - */ -- if (unlikely(ieee80211_skb_resize(sdata, skb, -- max_t(int, extra_head + hw_headroom - -- skb_headroom(skb), 0), -- false))) { -+ if (unlikely(ieee80211_skb_resize(local, sdata, skb, extra_head, 0))) { - kfree_skb(skb); - return true; - } diff --git a/package/kernel/mac80211/patches/subsys/304-mac80211-sta-randomize-BA-session-dialog-token-alloc.patch b/package/kernel/mac80211/patches/subsys/304-mac80211-sta-randomize-BA-session-dialog-token-alloc.patch index 10d8ad8d71..d09d70725e 100644 --- a/package/kernel/mac80211/patches/subsys/304-mac80211-sta-randomize-BA-session-dialog-token-alloc.patch +++ b/package/kernel/mac80211/patches/subsys/304-mac80211-sta-randomize-BA-session-dialog-token-alloc.patch @@ -28,7 +28,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com> --- a/net/mac80211/sta_info.c +++ b/net/mac80211/sta_info.c -@@ -339,6 +339,7 @@ struct sta_info *sta_info_alloc(struct i +@@ -357,6 +357,7 @@ struct sta_info *sta_info_alloc(struct i INIT_WORK(&sta->drv_deliver_wk, sta_deliver_ps_frames); INIT_WORK(&sta->ampdu_mlme.work, ieee80211_ba_session_work); mutex_init(&sta->ampdu_mlme.mtx); diff --git a/package/kernel/mac80211/patches/subsys/305-mac80211-improve-AQL-tx-airtime-estimation.patch b/package/kernel/mac80211/patches/subsys/305-mac80211-improve-AQL-tx-airtime-estimation.patch deleted file mode 100644 index bee43a60fa..0000000000 --- a/package/kernel/mac80211/patches/subsys/305-mac80211-improve-AQL-tx-airtime-estimation.patch +++ /dev/null @@ -1,81 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Fri, 24 Jul 2020 20:25:07 +0200 -Subject: [PATCH] mac80211: improve AQL tx airtime estimation - -AQL does not take into account that most HT/VHT/HE traffic is A-MPDU aggregated. -Because of that, the per-packet airtime overhead is vastly overestimated. -Improve it by assuming an average aggregation length of 16 for non-legacy -traffic if not using the VO AC queue. -This should improve performance with high data rates, especially with multiple -stations - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/airtime.c -+++ b/net/mac80211/airtime.c -@@ -551,7 +551,7 @@ EXPORT_SYMBOL_GPL(ieee80211_calc_tx_airt - u32 ieee80211_calc_expected_tx_airtime(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct ieee80211_sta *pubsta, -- int len) -+ int len, bool ampdu) - { - struct ieee80211_supported_band *sband; - struct ieee80211_chanctx_conf *conf; -@@ -572,10 +572,26 @@ u32 ieee80211_calc_expected_tx_airtime(s - if (pubsta) { - struct sta_info *sta = container_of(pubsta, struct sta_info, - sta); -+ struct ieee80211_tx_rate *rate = &sta->tx_stats.last_rate; -+ u32 airtime; - -- return ieee80211_calc_tx_airtime_rate(hw, -- &sta->tx_stats.last_rate, -- band, len); -+ if (!(rate->flags & (IEEE80211_TX_RC_VHT_MCS | -+ IEEE80211_TX_RC_MCS))) -+ ampdu = false; -+ -+ /* -+ * Assume that HT/VHT transmission on any AC except VO will -+ * use aggregation. Since we don't have reliable reporting -+ * of aggregation length, assume an average of 16. -+ * This will not be very accurate, but much better than simply -+ * assuming un-aggregated tx. -+ */ -+ airtime = ieee80211_calc_tx_airtime_rate(hw, rate, band, -+ ampdu ? len * 16 : len); -+ if (ampdu) -+ airtime /= 16; -+ -+ return airtime; - } - - if (!conf) ---- a/net/mac80211/ieee80211_i.h -+++ b/net/mac80211/ieee80211_i.h -@@ -2294,7 +2294,7 @@ extern const struct ethtool_ops ieee8021 - u32 ieee80211_calc_expected_tx_airtime(struct ieee80211_hw *hw, - struct ieee80211_vif *vif, - struct ieee80211_sta *pubsta, -- int len); -+ int len, bool ampdu); - #ifdef CPTCFG_MAC80211_NOINLINE - #define debug_noinline noinline - #else ---- a/net/mac80211/tx.c -+++ b/net/mac80211/tx.c -@@ -3707,10 +3707,11 @@ encap_out: - - if (vif && - wiphy_ext_feature_isset(local->hw.wiphy, NL80211_EXT_FEATURE_AQL)) { -+ bool ampdu = txq->ac != IEEE80211_AC_VO; - u32 airtime; - - airtime = ieee80211_calc_expected_tx_airtime(hw, vif, txq->sta, -- skb->len); -+ skb->len, ampdu); - if (airtime) { - airtime = ieee80211_info_set_tx_time_est(info, airtime); - ieee80211_sta_update_pending_airtime(local, tx.sta, diff --git a/package/kernel/mac80211/patches/subsys/307-mac80211-add-a-function-for-running-rx-without-passi.patch b/package/kernel/mac80211/patches/subsys/307-mac80211-add-a-function-for-running-rx-without-passi.patch deleted file mode 100644 index 802d57497c..0000000000 --- a/package/kernel/mac80211/patches/subsys/307-mac80211-add-a-function-for-running-rx-without-passi.patch +++ /dev/null @@ -1,186 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Sat, 25 Jul 2020 20:53:23 +0200 -Subject: [PATCH] mac80211: add a function for running rx without passing skbs - to the stack - -This can be used to run mac80211 rx processing on a batch of frames in NAPI -poll before passing them to the network stack in a large batch. -This can improve icache footprint, or it can be used to pass frames via -netif_receive_skb_list. - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/include/net/mac80211.h -+++ b/include/net/mac80211.h -@@ -4358,6 +4358,31 @@ void ieee80211_free_hw(struct ieee80211_ - void ieee80211_restart_hw(struct ieee80211_hw *hw); - - /** -+ * ieee80211_rx_list - receive frame and store processed skbs in a list -+ * -+ * Use this function to hand received frames to mac80211. The receive -+ * buffer in @skb must start with an IEEE 802.11 header. In case of a -+ * paged @skb is used, the driver is recommended to put the ieee80211 -+ * header of the frame on the linear part of the @skb to avoid memory -+ * allocation and/or memcpy by the stack. -+ * -+ * This function may not be called in IRQ context. Calls to this function -+ * for a single hardware must be synchronized against each other. Calls to -+ * this function, ieee80211_rx_ni() and ieee80211_rx_irqsafe() may not be -+ * mixed for a single hardware. Must not run concurrently with -+ * ieee80211_tx_status() or ieee80211_tx_status_ni(). -+ * -+ * This function must be called with BHs disabled and RCU read lock -+ * -+ * @hw: the hardware this frame came in on -+ * @sta: the station the frame was received from, or %NULL -+ * @skb: the buffer to receive, owned by mac80211 after this call -+ * @list: the destination list -+ */ -+void ieee80211_rx_list(struct ieee80211_hw *hw, struct ieee80211_sta *sta, -+ struct sk_buff *skb, struct list_head *list); -+ -+/** - * ieee80211_rx_napi - receive frame from NAPI context - * - * Use this function to hand received frames to mac80211. The receive ---- a/net/mac80211/ieee80211_i.h -+++ b/net/mac80211/ieee80211_i.h -@@ -218,7 +218,7 @@ enum ieee80211_rx_flags { - }; - - struct ieee80211_rx_data { -- struct napi_struct *napi; -+ struct list_head *list; - struct sk_buff *skb; - struct ieee80211_local *local; - struct ieee80211_sub_if_data *sdata; ---- a/net/mac80211/rx.c -+++ b/net/mac80211/rx.c -@@ -2579,8 +2579,8 @@ static void ieee80211_deliver_skb_to_loc - memset(skb->cb, 0, sizeof(skb->cb)); - - /* deliver to local stack */ -- if (rx->napi) -- napi_gro_receive(rx->napi, skb); -+ if (rx->list) -+ list_add_tail(&skb->list, rx->list); - else - netif_receive_skb(skb); - } -@@ -3870,7 +3870,6 @@ void ieee80211_release_reorder_timeout(s - /* This is OK -- must be QoS data frame */ - .security_idx = tid, - .seqno_idx = tid, -- .napi = NULL, /* must be NULL to not have races */ - }; - struct tid_ampdu_rx *tid_agg_rx; - -@@ -4480,8 +4479,8 @@ static bool ieee80211_invoke_fast_rx(str - /* deliver to local stack */ - skb->protocol = eth_type_trans(skb, fast_rx->dev); - memset(skb->cb, 0, sizeof(skb->cb)); -- if (rx->napi) -- napi_gro_receive(rx->napi, skb); -+ if (rx->list) -+ list_add_tail(&skb->list, rx->list); - else - netif_receive_skb(skb); - -@@ -4548,7 +4547,7 @@ static bool ieee80211_prepare_and_rx_han - static void __ieee80211_rx_handle_packet(struct ieee80211_hw *hw, - struct ieee80211_sta *pubsta, - struct sk_buff *skb, -- struct napi_struct *napi) -+ struct list_head *list) - { - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_sub_if_data *sdata; -@@ -4563,7 +4562,7 @@ static void __ieee80211_rx_handle_packet - memset(&rx, 0, sizeof(rx)); - rx.skb = skb; - rx.local = local; -- rx.napi = napi; -+ rx.list = list; - - if (ieee80211_is_data(fc) || ieee80211_is_mgmt(fc)) - I802_DEBUG_INC(local->dot11ReceivedFragmentCount); -@@ -4671,8 +4670,8 @@ static void __ieee80211_rx_handle_packet - * This is the receive path handler. It is called by a low level driver when an - * 802.11 MPDU is received from the hardware. - */ --void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta, -- struct sk_buff *skb, struct napi_struct *napi) -+void ieee80211_rx_list(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta, -+ struct sk_buff *skb, struct list_head *list) - { - struct ieee80211_local *local = hw_to_local(hw); - struct ieee80211_rate *rate = NULL; -@@ -4764,36 +4763,53 @@ void ieee80211_rx_napi(struct ieee80211_ - status->rx_flags = 0; - - /* -- * key references and virtual interfaces are protected using RCU -- * and this requires that we are in a read-side RCU section during -- * receive processing -- */ -- rcu_read_lock(); -- -- /* - * Frames with failed FCS/PLCP checksum are not returned, - * all other frames are returned without radiotap header - * if it was previously present. - * Also, frames with less than 16 bytes are dropped. - */ - skb = ieee80211_rx_monitor(local, skb, rate); -- if (!skb) { -- rcu_read_unlock(); -+ if (!skb) - return; -- } - - ieee80211_tpt_led_trig_rx(local, - ((struct ieee80211_hdr *)skb->data)->frame_control, - skb->len); - -- __ieee80211_rx_handle_packet(hw, pubsta, skb, napi); -- -- rcu_read_unlock(); -+ __ieee80211_rx_handle_packet(hw, pubsta, skb, list); - - return; - drop: - kfree_skb(skb); - } -+EXPORT_SYMBOL(ieee80211_rx_list); -+ -+void ieee80211_rx_napi(struct ieee80211_hw *hw, struct ieee80211_sta *pubsta, -+ struct sk_buff *skb, struct napi_struct *napi) -+{ -+ struct sk_buff *tmp; -+ LIST_HEAD(list); -+ -+ -+ /* -+ * key references and virtual interfaces are protected using RCU -+ * and this requires that we are in a read-side RCU section during -+ * receive processing -+ */ -+ rcu_read_lock(); -+ ieee80211_rx_list(hw, pubsta, skb, &list); -+ rcu_read_unlock(); -+ -+ if (!napi) { -+ netif_receive_skb_list(&list); -+ return; -+ } -+ -+ list_for_each_entry_safe(skb, tmp, &list, list) { -+ skb_list_del_init(skb); -+ napi_gro_receive(napi, skb); -+ } -+} - EXPORT_SYMBOL(ieee80211_rx_napi); - - /* This is a version of the rx handler that can be called from hard irq diff --git a/package/kernel/mac80211/patches/subsys/308-net-fq_impl-use-skb_get_hash-instead-of-skb_get_hash.patch b/package/kernel/mac80211/patches/subsys/308-net-fq_impl-use-skb_get_hash-instead-of-skb_get_hash.patch deleted file mode 100644 index 77ecc82302..0000000000 --- a/package/kernel/mac80211/patches/subsys/308-net-fq_impl-use-skb_get_hash-instead-of-skb_get_hash.patch +++ /dev/null @@ -1,55 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Sun, 26 Jul 2020 14:37:02 +0200 -Subject: [PATCH] net/fq_impl: use skb_get_hash instead of - skb_get_hash_perturb - -This avoids unnecessary regenerating of the skb flow hash - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/include/net/fq.h -+++ b/include/net/fq.h -@@ -69,15 +69,6 @@ struct fq { - struct list_head backlogs; - spinlock_t lock; - u32 flows_cnt; --#if LINUX_VERSION_IS_GEQ(5,3,10) || \ -- LINUX_VERSION_IN_RANGE(4,19,83, 4,20,0) || \ -- LINUX_VERSION_IN_RANGE(4,14,153, 4,15,0) || \ -- LINUX_VERSION_IN_RANGE(4,9,200, 4,10,0) || \ -- LINUX_VERSION_IN_RANGE(4,4,200, 4,5,0) -- siphash_key_t perturbation; --#else -- u32 perturbation; --#endif - u32 limit; - u32 memory_limit; - u32 memory_usage; ---- a/include/net/fq_impl.h -+++ b/include/net/fq_impl.h -@@ -108,15 +108,7 @@ begin: - - static u32 fq_flow_idx(struct fq *fq, struct sk_buff *skb) - { --#if LINUX_VERSION_IS_GEQ(5,3,10) || \ -- LINUX_VERSION_IN_RANGE(4,19,83, 4,20,0) || \ -- LINUX_VERSION_IN_RANGE(4,14,153, 4,15,0) || \ -- LINUX_VERSION_IN_RANGE(4,9,200, 4,10,0) || \ -- LINUX_VERSION_IN_RANGE(4,4,200, 4,5,0) -- u32 hash = skb_get_hash_perturb(skb, &fq->perturbation); --#else -- u32 hash = skb_get_hash_perturb(skb, fq->perturbation); --#endif -+ u32 hash = skb_get_hash(skb); - - return reciprocal_scale(hash, fq->flows_cnt); - } -@@ -316,7 +308,6 @@ static int fq_init(struct fq *fq, int fl - INIT_LIST_HEAD(&fq->backlogs); - spin_lock_init(&fq->lock); - fq->flows_cnt = max_t(u32, flows_cnt, 1); -- get_random_bytes(&fq->perturbation, sizeof(fq->perturbation)); - fq->quantum = 300; - fq->limit = 8192; - fq->memory_limit = 16 << 20; /* 16 MBytes */ diff --git a/package/kernel/mac80211/patches/subsys/309-mac80211-calculcate-skb-hash-early-when-using-itxq.patch b/package/kernel/mac80211/patches/subsys/309-mac80211-calculcate-skb-hash-early-when-using-itxq.patch deleted file mode 100644 index 92b136279a..0000000000 --- a/package/kernel/mac80211/patches/subsys/309-mac80211-calculcate-skb-hash-early-when-using-itxq.patch +++ /dev/null @@ -1,19 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Sun, 26 Jul 2020 14:42:58 +0200 -Subject: [PATCH] mac80211: calculcate skb hash early when using itxq - -This avoids flow separation issues when using software encryption - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/tx.c -+++ b/net/mac80211/tx.c -@@ -3937,6 +3937,7 @@ void __ieee80211_subif_start_xmit(struct - if (local->ops->wake_tx_queue) { - u16 queue = __ieee80211_select_queue(sdata, sta, skb); - skb_set_queue_mapping(skb, queue); -+ skb_get_hash(skb); - } - - if (sta) { diff --git a/package/kernel/mac80211/patches/subsys/311-mac80211-use-rate-provided-via-status-rate-on-ieee80.patch b/package/kernel/mac80211/patches/subsys/311-mac80211-use-rate-provided-via-status-rate-on-ieee80.patch deleted file mode 100644 index ee1db716e0..0000000000 --- a/package/kernel/mac80211/patches/subsys/311-mac80211-use-rate-provided-via-status-rate-on-ieee80.patch +++ /dev/null @@ -1,151 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Wed, 12 Aug 2020 17:04:22 +0200 -Subject: [PATCH] mac80211: use rate provided via status->rate on - ieee80211_tx_status_ext for AQL - -Since ieee80211_tx_info does not have enough room to encode HE rates, HE -drivers use status->rate to provide rate info. -Store it in struct sta_info and use it for AQL. - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/airtime.c -+++ b/net/mac80211/airtime.c -@@ -487,14 +487,61 @@ u32 ieee80211_calc_rx_airtime(struct iee - } - EXPORT_SYMBOL_GPL(ieee80211_calc_rx_airtime); - -+static bool ieee80211_fill_rate_info(struct ieee80211_hw *hw, -+ struct ieee80211_rx_status *stat, u8 band, -+ struct rate_info *ri) -+{ -+ struct ieee80211_supported_band *sband = hw->wiphy->bands[band]; -+ int i; -+ -+ if (!ri || !sband) -+ return false; -+ -+ stat->bw = ri->bw; -+ stat->nss = ri->nss; -+ stat->rate_idx = ri->mcs; -+ -+ if (ri->flags & RATE_INFO_FLAGS_HE_MCS) -+ stat->encoding = RX_ENC_HE; -+ else if (ri->flags & RATE_INFO_FLAGS_VHT_MCS) -+ stat->encoding = RX_ENC_VHT; -+ else if (ri->flags & RATE_INFO_FLAGS_MCS) -+ stat->encoding = RX_ENC_HT; -+ else -+ stat->encoding = RX_ENC_LEGACY; -+ -+ if (ri->flags & RATE_INFO_FLAGS_SHORT_GI) -+ stat->enc_flags |= RX_ENC_FLAG_SHORT_GI; -+ -+ stat->he_gi = ri->he_gi; -+ -+ if (stat->encoding != RX_ENC_LEGACY) -+ return true; -+ -+ stat->rate_idx = 0; -+ for (i = 0; i < sband->n_bitrates; i++) { -+ if (ri->legacy != sband->bitrates[i].bitrate) -+ continue; -+ -+ stat->rate_idx = i; -+ return true; -+ } -+ -+ return false; -+} -+ - static u32 ieee80211_calc_tx_airtime_rate(struct ieee80211_hw *hw, - struct ieee80211_tx_rate *rate, -+ struct rate_info *ri, - u8 band, int len) - { - struct ieee80211_rx_status stat = { - .band = band, - }; - -+ if (ieee80211_fill_rate_info(hw, &stat, band, ri)) -+ goto out; -+ - if (rate->idx < 0 || !rate->count) - return 0; - -@@ -522,6 +569,7 @@ static u32 ieee80211_calc_tx_airtime_rat - stat.encoding = RX_ENC_LEGACY; - } - -+out: - return ieee80211_calc_rx_airtime(hw, &stat, len); - } - -@@ -536,7 +584,7 @@ u32 ieee80211_calc_tx_airtime(struct iee - struct ieee80211_tx_rate *rate = &info->status.rates[i]; - u32 cur_duration; - -- cur_duration = ieee80211_calc_tx_airtime_rate(hw, rate, -+ cur_duration = ieee80211_calc_tx_airtime_rate(hw, rate, NULL, - info->band, len); - if (!cur_duration) - break; -@@ -573,6 +621,7 @@ u32 ieee80211_calc_expected_tx_airtime(s - struct sta_info *sta = container_of(pubsta, struct sta_info, - sta); - struct ieee80211_tx_rate *rate = &sta->tx_stats.last_rate; -+ struct rate_info *ri = &sta->tx_stats.last_rate_info; - u32 airtime; - - if (!(rate->flags & (IEEE80211_TX_RC_VHT_MCS | -@@ -586,7 +635,7 @@ u32 ieee80211_calc_expected_tx_airtime(s - * This will not be very accurate, but much better than simply - * assuming un-aggregated tx. - */ -- airtime = ieee80211_calc_tx_airtime_rate(hw, rate, band, -+ airtime = ieee80211_calc_tx_airtime_rate(hw, rate, ri, band, - ampdu ? len * 16 : len); - if (ampdu) - airtime /= 16; ---- a/net/mac80211/sta_info.h -+++ b/net/mac80211/sta_info.h -@@ -609,6 +609,7 @@ struct sta_info { - u64 packets[IEEE80211_NUM_ACS]; - u64 bytes[IEEE80211_NUM_ACS]; - struct ieee80211_tx_rate last_rate; -+ struct rate_info last_rate_info; - u64 msdu[IEEE80211_NUM_TIDS + 1]; - } tx_stats; - u16 tid_seq[IEEE80211_QOS_CTL_TID_MASK + 1]; ---- a/net/mac80211/status.c -+++ b/net/mac80211/status.c -@@ -1147,9 +1147,17 @@ void ieee80211_tx_status_ext(struct ieee - struct ieee80211_tx_info *info = status->info; - struct ieee80211_sta *pubsta = status->sta; - struct ieee80211_supported_band *sband; -+ struct sta_info *sta; - int retry_count; - bool acked, noack_success; - -+ if (pubsta) { -+ sta = container_of(pubsta, struct sta_info, sta); -+ -+ if (status->rate) -+ sta->tx_stats.last_rate_info = *status->rate; -+ } -+ - if (status->skb) - return __ieee80211_tx_status(hw, status); - -@@ -1164,10 +1172,6 @@ void ieee80211_tx_status_ext(struct ieee - noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED); - - if (pubsta) { -- struct sta_info *sta; -- -- sta = container_of(pubsta, struct sta_info, sta); -- - if (!acked && !noack_success) - sta->status_stats.retry_failed++; - sta->status_stats.retry_count += retry_count; diff --git a/package/kernel/mac80211/patches/subsys/312-mac80211-factor-out-code-to-look-up-the-average-pack.patch b/package/kernel/mac80211/patches/subsys/312-mac80211-factor-out-code-to-look-up-the-average-pack.patch deleted file mode 100644 index 06db852c30..0000000000 --- a/package/kernel/mac80211/patches/subsys/312-mac80211-factor-out-code-to-look-up-the-average-pack.patch +++ /dev/null @@ -1,187 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Wed, 12 Aug 2020 17:06:12 +0200 -Subject: [PATCH] mac80211: factor out code to look up the average packet - length duration for a rate - -This will be used to enhance AQL estimated aggregation length - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/airtime.c -+++ b/net/mac80211/airtime.c -@@ -405,18 +405,14 @@ ieee80211_calc_legacy_rate_duration(u16 - return duration; - } - --u32 ieee80211_calc_rx_airtime(struct ieee80211_hw *hw, -- struct ieee80211_rx_status *status, -- int len) -+static u32 ieee80211_get_rate_duration(struct ieee80211_hw *hw, -+ struct ieee80211_rx_status *status, -+ u32 *overhead) - { -- struct ieee80211_supported_band *sband; -- const struct ieee80211_rate *rate; - bool sgi = status->enc_flags & RX_ENC_FLAG_SHORT_GI; -- bool sp = status->enc_flags & RX_ENC_FLAG_SHORTPRE; - int bw, streams; - int group, idx; - u32 duration; -- bool cck; - - switch (status->bw) { - case RATE_INFO_BW_20: -@@ -437,20 +433,6 @@ u32 ieee80211_calc_rx_airtime(struct iee - } - - switch (status->encoding) { -- case RX_ENC_LEGACY: -- if (WARN_ON_ONCE(status->band > NL80211_BAND_5GHZ)) -- return 0; -- -- sband = hw->wiphy->bands[status->band]; -- if (!sband || status->rate_idx >= sband->n_bitrates) -- return 0; -- -- rate = &sband->bitrates[status->rate_idx]; -- cck = rate->flags & IEEE80211_RATE_MANDATORY_B; -- -- return ieee80211_calc_legacy_rate_duration(rate->bitrate, sp, -- cck, len); -- - case RX_ENC_VHT: - streams = status->nss; - idx = status->rate_idx; -@@ -477,13 +459,47 @@ u32 ieee80211_calc_rx_airtime(struct iee - - duration = airtime_mcs_groups[group].duration[idx]; - duration <<= airtime_mcs_groups[group].shift; -+ *overhead = 36 + (streams << 2); -+ -+ return duration; -+} -+ -+ -+u32 ieee80211_calc_rx_airtime(struct ieee80211_hw *hw, -+ struct ieee80211_rx_status *status, -+ int len) -+{ -+ struct ieee80211_supported_band *sband; -+ u32 duration, overhead = 0; -+ -+ if (status->encoding == RX_ENC_LEGACY) { -+ const struct ieee80211_rate *rate; -+ bool sp = status->enc_flags & RX_ENC_FLAG_SHORTPRE; -+ bool cck; -+ -+ if (WARN_ON_ONCE(status->band > NL80211_BAND_5GHZ)) -+ return 0; -+ -+ sband = hw->wiphy->bands[status->band]; -+ if (!sband || status->rate_idx >= sband->n_bitrates) -+ return 0; -+ -+ rate = &sband->bitrates[status->rate_idx]; -+ cck = rate->flags & IEEE80211_RATE_MANDATORY_B; -+ -+ return ieee80211_calc_legacy_rate_duration(rate->bitrate, sp, -+ cck, len); -+ } -+ -+ duration = ieee80211_get_rate_duration(hw, status, &overhead); -+ if (!duration) -+ return 0; -+ - duration *= len; - duration /= AVG_PKT_SIZE; - duration /= 1024; - -- duration += 36 + (streams << 2); -- -- return duration; -+ return duration + overhead; - } - EXPORT_SYMBOL_GPL(ieee80211_calc_rx_airtime); - -@@ -530,46 +546,57 @@ static bool ieee80211_fill_rate_info(str - return false; - } - --static u32 ieee80211_calc_tx_airtime_rate(struct ieee80211_hw *hw, -- struct ieee80211_tx_rate *rate, -- struct rate_info *ri, -- u8 band, int len) -+static int ieee80211_fill_rx_status(struct ieee80211_rx_status *stat, -+ struct ieee80211_hw *hw, -+ struct ieee80211_tx_rate *rate, -+ struct rate_info *ri, u8 band, int len) - { -- struct ieee80211_rx_status stat = { -- .band = band, -- }; -+ memset(stat, 0, sizeof(*stat)); -+ stat->band = band; - -- if (ieee80211_fill_rate_info(hw, &stat, band, ri)) -- goto out; -+ if (ieee80211_fill_rate_info(hw, stat, band, ri)) -+ return 0; - - if (rate->idx < 0 || !rate->count) -- return 0; -+ return -1; - - if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH) -- stat.bw = RATE_INFO_BW_80; -+ stat->bw = RATE_INFO_BW_80; - else if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH) -- stat.bw = RATE_INFO_BW_40; -+ stat->bw = RATE_INFO_BW_40; - else -- stat.bw = RATE_INFO_BW_20; -+ stat->bw = RATE_INFO_BW_20; - -- stat.enc_flags = 0; -+ stat->enc_flags = 0; - if (rate->flags & IEEE80211_TX_RC_USE_SHORT_PREAMBLE) -- stat.enc_flags |= RX_ENC_FLAG_SHORTPRE; -+ stat->enc_flags |= RX_ENC_FLAG_SHORTPRE; - if (rate->flags & IEEE80211_TX_RC_SHORT_GI) -- stat.enc_flags |= RX_ENC_FLAG_SHORT_GI; -+ stat->enc_flags |= RX_ENC_FLAG_SHORT_GI; - -- stat.rate_idx = rate->idx; -+ stat->rate_idx = rate->idx; - if (rate->flags & IEEE80211_TX_RC_VHT_MCS) { -- stat.encoding = RX_ENC_VHT; -- stat.rate_idx = ieee80211_rate_get_vht_mcs(rate); -- stat.nss = ieee80211_rate_get_vht_nss(rate); -+ stat->encoding = RX_ENC_VHT; -+ stat->rate_idx = ieee80211_rate_get_vht_mcs(rate); -+ stat->nss = ieee80211_rate_get_vht_nss(rate); - } else if (rate->flags & IEEE80211_TX_RC_MCS) { -- stat.encoding = RX_ENC_HT; -+ stat->encoding = RX_ENC_HT; - } else { -- stat.encoding = RX_ENC_LEGACY; -+ stat->encoding = RX_ENC_LEGACY; - } - --out: -+ return 0; -+} -+ -+static u32 ieee80211_calc_tx_airtime_rate(struct ieee80211_hw *hw, -+ struct ieee80211_tx_rate *rate, -+ struct rate_info *ri, -+ u8 band, int len) -+{ -+ struct ieee80211_rx_status stat; -+ -+ if (ieee80211_fill_rx_status(&stat, hw, rate, ri, band, len)) -+ return 0; -+ - return ieee80211_calc_rx_airtime(hw, &stat, len); - } - diff --git a/package/kernel/mac80211/patches/subsys/313-mac80211-improve-AQL-aggregation-estimation-for-low-.patch b/package/kernel/mac80211/patches/subsys/313-mac80211-improve-AQL-aggregation-estimation-for-low-.patch deleted file mode 100644 index a5df07e58d..0000000000 --- a/package/kernel/mac80211/patches/subsys/313-mac80211-improve-AQL-aggregation-estimation-for-low-.patch +++ /dev/null @@ -1,67 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Wed, 12 Aug 2020 17:07:10 +0200 -Subject: [PATCH] mac80211: improve AQL aggregation estimation for low data - rates - -Links with low data rates use much smaller aggregates and are much more -sensitive to latency added by bufferbloat. -Tune the assumed aggregation length based on the tx rate duration. - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/airtime.c -+++ b/net/mac80211/airtime.c -@@ -647,27 +647,41 @@ u32 ieee80211_calc_expected_tx_airtime(s - if (pubsta) { - struct sta_info *sta = container_of(pubsta, struct sta_info, - sta); -+ struct ieee80211_rx_status stat; - struct ieee80211_tx_rate *rate = &sta->tx_stats.last_rate; - struct rate_info *ri = &sta->tx_stats.last_rate_info; -- u32 airtime; -+ u32 duration, overhead; -+ u8 agg_shift; - -- if (!(rate->flags & (IEEE80211_TX_RC_VHT_MCS | -- IEEE80211_TX_RC_MCS))) -- ampdu = false; -+ if (ieee80211_fill_rx_status(&stat, hw, rate, ri, band, len)) -+ return 0; - -+ if (stat.encoding == RX_ENC_LEGACY || !ampdu) -+ return ieee80211_calc_rx_airtime(hw, &stat, len); -+ -+ duration = ieee80211_get_rate_duration(hw, &stat, &overhead); - /* - * Assume that HT/VHT transmission on any AC except VO will - * use aggregation. Since we don't have reliable reporting -- * of aggregation length, assume an average of 16. -+ * of aggregation length, assume an average size based on the -+ * tx rate. - * This will not be very accurate, but much better than simply -- * assuming un-aggregated tx. -+ * assuming un-aggregated tx in all cases. - */ -- airtime = ieee80211_calc_tx_airtime_rate(hw, rate, ri, band, -- ampdu ? len * 16 : len); -- if (ampdu) -- airtime /= 16; -+ if (duration > 400) /* <= VHT20 MCS2 1S */ -+ agg_shift = 1; -+ else if (duration > 250) /* <= VHT20 MCS3 1S or MCS1 2S */ -+ agg_shift = 2; -+ else if (duration > 150) /* <= VHT20 MCS5 1S or MCS3 2S */ -+ agg_shift = 3; -+ else -+ agg_shift = 4; -+ -+ duration *= len; -+ duration /= AVG_PKT_SIZE; -+ duration /= 1024; - -- return airtime; -+ return duration + (overhead >> agg_shift); - } - - if (!conf) diff --git a/package/kernel/mac80211/patches/subsys/314-mac80211-add-missing-queue-hash-initialization-to-80.patch b/package/kernel/mac80211/patches/subsys/314-mac80211-add-missing-queue-hash-initialization-to-80.patch deleted file mode 100644 index eb56a2cac5..0000000000 --- a/package/kernel/mac80211/patches/subsys/314-mac80211-add-missing-queue-hash-initialization-to-80.patch +++ /dev/null @@ -1,25 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Mon, 17 Aug 2020 13:55:56 +0200 -Subject: [PATCH] mac80211: add missing queue/hash initialization to - 802.3 xmit - -Fixes AQL for encap-offloaded tx - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/tx.c -+++ b/net/mac80211/tx.c -@@ -4200,6 +4200,12 @@ static void ieee80211_8023_xmit(struct i - if (is_zero_ether_addr(ra)) - goto out_free; - -+ if (local->ops->wake_tx_queue) { -+ u16 queue = __ieee80211_select_queue(sdata, sta, skb); -+ skb_set_queue_mapping(skb, queue); -+ skb_get_hash(skb); -+ } -+ - multicast = is_multicast_ether_addr(ra); - - if (sta) diff --git a/package/kernel/mac80211/patches/subsys/315-mac80211-check-and-refresh-aggregation-session-in-en.patch b/package/kernel/mac80211/patches/subsys/315-mac80211-check-and-refresh-aggregation-session-in-en.patch index e411d59722..d121eec88e 100644 --- a/package/kernel/mac80211/patches/subsys/315-mac80211-check-and-refresh-aggregation-session-in-en.patch +++ b/package/kernel/mac80211/patches/subsys/315-mac80211-check-and-refresh-aggregation-session-in-en.patch @@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -4189,6 +4189,8 @@ static void ieee80211_8023_xmit(struct i +@@ -4186,6 +4186,8 @@ static void ieee80211_8023_xmit(struct i bool authorized = false; bool multicast; unsigned char *ra = ehdr->h_dest; @@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (IS_ERR(sta) || (sta && !sta->uploaded)) sta = NULL; -@@ -4226,6 +4228,22 @@ static void ieee80211_8023_xmit(struct i +@@ -4223,6 +4225,22 @@ static void ieee80211_8023_xmit(struct i memset(info, 0, sizeof(*info)); diff --git a/package/kernel/mac80211/patches/subsys/316-mac80211-skip-encap-offload-for-tx-multicast-control.patch b/package/kernel/mac80211/patches/subsys/316-mac80211-skip-encap-offload-for-tx-multicast-control.patch index 6dce21db1e..e8763e6237 100644 --- a/package/kernel/mac80211/patches/subsys/316-mac80211-skip-encap-offload-for-tx-multicast-control.patch +++ b/package/kernel/mac80211/patches/subsys/316-mac80211-skip-encap-offload-for-tx-multicast-control.patch @@ -12,7 +12,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -4184,88 +4184,47 @@ static void ieee80211_8023_xmit(struct i +@@ -4181,88 +4181,47 @@ static void ieee80211_8023_xmit(struct i struct sk_buff *skb) { struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); @@ -115,7 +115,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (sdata->vif.type == NL80211_IFTYPE_AP_VLAN) sdata = container_of(sdata->bss, -@@ -4286,6 +4245,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8 +@@ -4283,6 +4242,7 @@ netdev_tx_t ieee80211_subif_start_xmit_8 struct net_device *dev) { struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); @@ -123,7 +123,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> struct sta_info *sta; if (WARN_ON(!sdata->hw_80211_encap)) { -@@ -4302,6 +4262,10 @@ netdev_tx_t ieee80211_subif_start_xmit_8 +@@ -4299,6 +4259,10 @@ netdev_tx_t ieee80211_subif_start_xmit_8 if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) kfree_skb(skb); diff --git a/package/kernel/mac80211/patches/subsys/317-mac80211-set-info-control.hw_key-for-encap-offload-p.patch b/package/kernel/mac80211/patches/subsys/317-mac80211-set-info-control.hw_key-for-encap-offload-p.patch index cb5a986312..077a82d5ee 100644 --- a/package/kernel/mac80211/patches/subsys/317-mac80211-set-info-control.hw_key-for-encap-offload-p.patch +++ b/package/kernel/mac80211/patches/subsys/317-mac80211-set-info-control.hw_key-for-encap-offload-p.patch @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -4185,6 +4185,7 @@ static void ieee80211_8023_xmit(struct i +@@ -4182,6 +4182,7 @@ static void ieee80211_8023_xmit(struct i { struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); struct ieee80211_local *local = sdata->local; @@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> struct tid_ampdu_tx *tid_tx; u8 tid; -@@ -4233,6 +4234,10 @@ static void ieee80211_8023_xmit(struct i +@@ -4230,6 +4231,10 @@ static void ieee80211_8023_xmit(struct i info->control.flags |= IEEE80211_TX_CTRL_HW_80211_ENCAP; info->control.vif = &sdata->vif; diff --git a/package/kernel/mac80211/patches/subsys/318-mac80211-rework-tx-encapsulation-offload-API.patch b/package/kernel/mac80211/patches/subsys/318-mac80211-rework-tx-encapsulation-offload-API.patch index 7593c41da0..811c66499b 100644 --- a/package/kernel/mac80211/patches/subsys/318-mac80211-rework-tx-encapsulation-offload-API.patch +++ b/package/kernel/mac80211/patches/subsys/318-mac80211-rework-tx-encapsulation-offload-API.patch @@ -26,7 +26,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c -@@ -4150,6 +4150,35 @@ static int ath11k_set_he_mu_sounding_mod +@@ -4304,6 +4304,35 @@ static int ath11k_set_he_mu_sounding_mod return ret; } @@ -62,7 +62,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> static int ath11k_mac_op_add_interface(struct ieee80211_hw *hw, struct ieee80211_vif *vif) { -@@ -4159,7 +4188,6 @@ static int ath11k_mac_op_add_interface(s +@@ -4313,7 +4342,6 @@ static int ath11k_mac_op_add_interface(s struct vdev_create_params vdev_param = {0}; struct peer_create_params peer_param; u32 param_id, param_value; @@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> u16 nss; int i; int ret; -@@ -4253,30 +4281,7 @@ static int ath11k_mac_op_add_interface(s +@@ -4407,30 +4435,7 @@ static int ath11k_mac_op_add_interface(s list_add(&arvif->list, &ar->arvifs); spin_unlock_bh(&ar->data_lock); @@ -102,7 +102,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> nss = get_num_chains(ar->cfg_tx_chainmask) ? : 1; ret = ath11k_wmi_vdev_set_param_cmd(ar, arvif->vdev_id, -@@ -5599,6 +5604,7 @@ static const struct ieee80211_ops ath11k +@@ -5753,6 +5758,7 @@ static const struct ieee80211_ops ath11k .reconfig_complete = ath11k_mac_op_reconfig_complete, .add_interface = ath11k_mac_op_add_interface, .remove_interface = ath11k_mac_op_remove_interface, @@ -110,7 +110,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> .config = ath11k_mac_op_config, .bss_info_changed = ath11k_mac_op_bss_info_changed, .configure_filter = ath11k_mac_op_configure_filter, -@@ -5852,6 +5858,7 @@ static int __ath11k_mac_register(struct +@@ -6034,6 +6040,7 @@ static int __ath11k_mac_register(struct ieee80211_hw_set(ar->hw, QUEUE_CONTROL); ieee80211_hw_set(ar->hw, SUPPORTS_TX_FRAG); ieee80211_hw_set(ar->hw, REPORTS_LOW_ACK); @@ -120,7 +120,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> ieee80211_hw_set(ar->hw, TX_AMPDU_SETUP_IN_HW); --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -1603,6 +1603,21 @@ enum ieee80211_vif_flags { +@@ -1606,6 +1606,21 @@ enum ieee80211_vif_flags { IEEE80211_VIF_GET_NOA_UPDATE = BIT(3), }; @@ -142,7 +142,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /** * struct ieee80211_vif - per-interface data * -@@ -1623,6 +1638,11 @@ enum ieee80211_vif_flags { +@@ -1626,6 +1641,11 @@ enum ieee80211_vif_flags { * these need to be set (or cleared) when the interface is added * or, if supported by the driver, the interface type is changed * at runtime, mac80211 will never touch this field @@ -154,7 +154,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> * @hw_queue: hardware queue for each AC * @cab_queue: content-after-beacon (DTIM beacon really) queue, AP mode only * @chanctx_conf: The channel context this interface is assigned to, or %NULL -@@ -1659,6 +1679,7 @@ struct ieee80211_vif { +@@ -1662,6 +1682,7 @@ struct ieee80211_vif { struct ieee80211_chanctx_conf __rcu *chanctx_conf; u32 driver_flags; @@ -162,7 +162,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> #ifdef CPTCFG_MAC80211_DEBUGFS struct dentry *debugfs_dir; -@@ -2325,6 +2346,9 @@ struct ieee80211_txq { +@@ -2328,6 +2349,9 @@ struct ieee80211_txq { * aggregating MPDUs with the same keyid, allowing mac80211 to keep Tx * A-MPDU sessions active while rekeying with Extended Key ID. * @@ -172,7 +172,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> * @NUM_IEEE80211_HW_FLAGS: number of hardware flags, used for sizing arrays */ enum ieee80211_hw_flags { -@@ -2377,6 +2401,7 @@ enum ieee80211_hw_flags { +@@ -2380,6 +2404,7 @@ enum ieee80211_hw_flags { IEEE80211_HW_SUPPORTS_MULTI_BSSID, IEEE80211_HW_SUPPORTS_ONLY_HE_MULTI_BSSID, IEEE80211_HW_AMPDU_KEYBORDER_SUPPORT, @@ -180,7 +180,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* keep last, obviously */ NUM_IEEE80211_HW_FLAGS -@@ -3811,6 +3836,8 @@ enum ieee80211_reconfig_type { +@@ -3814,6 +3839,8 @@ enum ieee80211_reconfig_type { * @set_tid_config: Apply TID specific configurations. This callback may sleep. * @reset_tid_config: Reset TID specific configuration for the peer. * This callback may sleep. @@ -189,7 +189,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> */ struct ieee80211_ops { void (*tx)(struct ieee80211_hw *hw, -@@ -4122,6 +4149,8 @@ struct ieee80211_ops { +@@ -4125,6 +4152,8 @@ struct ieee80211_ops { int (*reset_tid_config)(struct ieee80211_hw *hw, struct ieee80211_vif *vif, struct ieee80211_sta *sta, u8 tids); @@ -210,7 +210,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h -@@ -1385,4 +1385,19 @@ static inline int drv_reset_tid_config(s +@@ -1384,4 +1384,19 @@ static inline int drv_reset_tid_config(s return ret; } @@ -232,7 +232,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> #endif /* __MAC80211_DRIVER_OPS */ --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -990,8 +990,6 @@ struct ieee80211_sub_if_data { +@@ -993,8 +993,6 @@ struct ieee80211_sub_if_data { } debugfs; #endif @@ -241,7 +241,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* must be last, dynamically sized area in this! */ struct ieee80211_vif vif; }; -@@ -1769,6 +1767,7 @@ void ieee80211_del_virtual_monitor(struc +@@ -1772,6 +1770,7 @@ void ieee80211_del_virtual_monitor(struc bool __ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata); void ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata, bool update_bss); @@ -375,7 +375,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> res = ieee80211_check_queues(sdata, ieee80211_vif_type_p2p(&sdata->vif)); if (res) -@@ -1286,61 +1371,6 @@ static const struct net_device_ops ieee8 +@@ -1293,61 +1378,6 @@ static const struct net_device_ops ieee8 }; @@ -437,7 +437,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> static void ieee80211_if_free(struct net_device *dev) { free_percpu(netdev_tstats(dev)); -@@ -1371,6 +1401,32 @@ static void ieee80211_if_setup_no_queue( +@@ -1378,6 +1408,32 @@ static void ieee80211_if_setup_no_queue( #endif } @@ -470,7 +470,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> static void ieee80211_iface_work(struct work_struct *work) { struct ieee80211_sub_if_data *sdata = -@@ -1553,7 +1609,6 @@ static void ieee80211_setup_sdata(struct +@@ -1560,7 +1616,6 @@ static void ieee80211_setup_sdata(struct sdata->vif.bss_conf.txpower = INT_MIN; /* unset */ sdata->noack_map = 0; @@ -478,7 +478,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* only monitor/p2p-device differ */ if (sdata->dev) { -@@ -1688,6 +1743,7 @@ static int ieee80211_runtime_change_ifty +@@ -1695,6 +1750,7 @@ static int ieee80211_runtime_change_ifty ieee80211_teardown_sdata(sdata); @@ -486,7 +486,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> ret = drv_change_interface(local, sdata, internal_type, p2p); if (ret) type = ieee80211_vif_type_p2p(&sdata->vif); -@@ -1700,6 +1756,7 @@ static int ieee80211_runtime_change_ifty +@@ -1707,6 +1763,7 @@ static int ieee80211_runtime_change_ifty ieee80211_check_queues(sdata, type); ieee80211_setup_sdata(sdata, type); @@ -520,14 +520,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - */ - if (sdata->hw_80211_encap) - return -EINVAL; -- /* Fall through */ +- fallthrough; - case WLAN_CIPHER_SUITE_AES_CMAC: case WLAN_CIPHER_SUITE_BIP_CMAC_256: case WLAN_CIPHER_SUITE_BIP_GMAC_128: --- a/net/mac80211/trace.h +++ b/net/mac80211/trace.h -@@ -2733,6 +2733,12 @@ TRACE_EVENT(drv_get_ftm_responder_stats, +@@ -2734,6 +2734,12 @@ TRACE_EVENT(drv_get_ftm_responder_stats, ) ); @@ -542,7 +542,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> #undef TRACE_INCLUDE_PATH --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -4181,11 +4181,10 @@ static bool ieee80211_tx_8023(struct iee +@@ -4178,11 +4178,10 @@ static bool ieee80211_tx_8023(struct iee static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata, struct net_device *dev, struct sta_info *sta, @@ -555,7 +555,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> struct tid_ampdu_tx *tid_tx; u8 tid; -@@ -4234,7 +4233,6 @@ static void ieee80211_8023_xmit(struct i +@@ -4231,7 +4230,6 @@ static void ieee80211_8023_xmit(struct i info->control.flags |= IEEE80211_TX_CTRL_HW_80211_ENCAP; info->control.vif = &sdata->vif; @@ -563,7 +563,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (key) info->control.hw_key = &key->conf; -@@ -4251,12 +4249,9 @@ netdev_tx_t ieee80211_subif_start_xmit_8 +@@ -4248,12 +4246,9 @@ netdev_tx_t ieee80211_subif_start_xmit_8 { struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); struct ethhdr *ehdr = (struct ethhdr *)skb->data; @@ -578,7 +578,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (unlikely(skb->len < ETH_HLEN)) { kfree_skb(skb); -@@ -4265,15 +4260,26 @@ netdev_tx_t ieee80211_subif_start_xmit_8 +@@ -4262,15 +4257,26 @@ netdev_tx_t ieee80211_subif_start_xmit_8 rcu_read_lock(); diff --git a/package/kernel/mac80211/patches/subsys/319-mac80211-reduce-duplication-in-tx-status-functions.patch b/package/kernel/mac80211/patches/subsys/319-mac80211-reduce-duplication-in-tx-status-functions.patch index e13723b160..83522a7541 100644 --- a/package/kernel/mac80211/patches/subsys/319-mac80211-reduce-duplication-in-tx-status-functions.patch +++ b/package/kernel/mac80211/patches/subsys/319-mac80211-reduce-duplication-in-tx-status-functions.patch @@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (ieee80211_is_data_qos(mgmt->frame_control)) { struct ieee80211_hdr *hdr = (void *) skb->data; -@@ -899,7 +887,8 @@ void ieee80211_tx_monitor(struct ieee802 +@@ -897,7 +885,8 @@ void ieee80211_tx_monitor(struct ieee802 } static void __ieee80211_tx_status(struct ieee80211_hw *hw, @@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> { struct sk_buff *skb = status->skb; struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data; -@@ -908,8 +897,6 @@ static void __ieee80211_tx_status(struct +@@ -906,8 +895,6 @@ static void __ieee80211_tx_status(struct struct sta_info *sta; __le16 fc; struct ieee80211_supported_band *sband; @@ -49,7 +49,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> bool send_to_cooked; bool acked; bool noack_success; -@@ -918,8 +905,6 @@ static void __ieee80211_tx_status(struct +@@ -916,8 +903,6 @@ static void __ieee80211_tx_status(struct int tid = IEEE80211_NUM_TIDS; u16 tx_time_est; @@ -58,7 +58,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> sband = local->hw.wiphy->bands[info->band]; fc = hdr->frame_control; -@@ -996,24 +981,14 @@ static void __ieee80211_tx_status(struct +@@ -994,24 +979,14 @@ static void __ieee80211_tx_status(struct if (info->flags & IEEE80211_TX_STAT_TX_FILTERED) { ieee80211_handle_filtered_frame(local, sta, skb); return; @@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked) ieee80211_frame_acked(sta, skb); -@@ -1038,20 +1013,6 @@ static void __ieee80211_tx_status(struct +@@ -1036,20 +1011,6 @@ static void __ieee80211_tx_status(struct true); ieee80211_info_set_tx_time_est(info, 0); } @@ -108,7 +108,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } /* SNMP counters -@@ -1135,7 +1096,7 @@ void ieee80211_tx_status(struct ieee8021 +@@ -1133,7 +1094,7 @@ void ieee80211_tx_status(struct ieee8021 if (sta) status.sta = &sta->sta; @@ -117,7 +117,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> rcu_read_unlock(); } EXPORT_SYMBOL(ieee80211_tx_status); -@@ -1148,7 +1109,7 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1146,7 +1107,7 @@ void ieee80211_tx_status_ext(struct ieee struct ieee80211_sta *pubsta = status->sta; struct ieee80211_supported_band *sband; struct sta_info *sta; @@ -126,7 +126,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> bool acked, noack_success; if (pubsta) { -@@ -1158,13 +1119,7 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1156,13 +1117,7 @@ void ieee80211_tx_status_ext(struct ieee sta->tx_stats.last_rate_info = *status->rate; } @@ -141,7 +141,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> sband = hw->wiphy->bands[info->band]; -@@ -1176,20 +1131,30 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1174,20 +1129,30 @@ void ieee80211_tx_status_ext(struct ieee sta->status_stats.retry_failed++; sta->status_stats.retry_count += retry_count; @@ -184,7 +184,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } rate_control_tx_status(local, sband, status); -@@ -1197,6 +1162,10 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1195,6 +1160,10 @@ void ieee80211_tx_status_ext(struct ieee ieee80211s_update_metric(local, sta, status); } diff --git a/package/kernel/mac80211/patches/subsys/320-mac80211-remove-tx-status-call-to-ieee80211_sta_regi.patch b/package/kernel/mac80211/patches/subsys/320-mac80211-remove-tx-status-call-to-ieee80211_sta_regi.patch index 168d6458a5..9bd1765b16 100644 --- a/package/kernel/mac80211/patches/subsys/320-mac80211-remove-tx-status-call-to-ieee80211_sta_regi.patch +++ b/package/kernel/mac80211/patches/subsys/320-mac80211-remove-tx-status-call-to-ieee80211_sta_regi.patch @@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/status.c +++ b/net/mac80211/status.c -@@ -997,12 +997,6 @@ static void __ieee80211_tx_status(struct +@@ -995,12 +995,6 @@ static void __ieee80211_tx_status(struct ieee80211_sta_tx_notify(sta->sdata, (void *) skb->data, acked, info->status.tx_time); diff --git a/package/kernel/mac80211/patches/subsys/321-mac80211-optimize-station-connection-monitor.patch b/package/kernel/mac80211/patches/subsys/321-mac80211-optimize-station-connection-monitor.patch index f8287c53a7..48d7686863 100644 --- a/package/kernel/mac80211/patches/subsys/321-mac80211-optimize-station-connection-monitor.patch +++ b/package/kernel/mac80211/patches/subsys/321-mac80211-optimize-station-connection-monitor.patch @@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -2045,8 +2045,6 @@ void ieee80211_dynamic_ps_timer(struct t +@@ -2047,8 +2047,6 @@ void ieee80211_dynamic_ps_timer(struct t void ieee80211_send_nullfunc(struct ieee80211_local *local, struct ieee80211_sub_if_data *sdata, bool powersave); @@ -73,7 +73,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } static void ieee80211_mlme_send_probe_req(struct ieee80211_sub_if_data *sdata, -@@ -3600,8 +3575,8 @@ static bool ieee80211_assoc_success(stru +@@ -3605,8 +3580,8 @@ static bool ieee80211_assoc_success(stru * Start timer to probe the connection to the AP now. * Also start the timer that will detect beacon loss. */ @@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> ret = true; out: -@@ -4569,10 +4544,26 @@ static void ieee80211_sta_conn_mon_timer +@@ -4577,10 +4552,26 @@ static void ieee80211_sta_conn_mon_timer from_timer(sdata, t, u.mgd.conn_mon_timer); struct ieee80211_if_managed *ifmgd = &sdata->u.mgd; struct ieee80211_local *local = sdata->local; @@ -122,7 +122,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> sta->rx_stats.fragments++; u64_stats_update_begin(&rx->sta->rx_stats.syncp); -@@ -4149,7 +4146,6 @@ void ieee80211_check_fast_rx(struct sta_ +@@ -4153,7 +4150,6 @@ void ieee80211_check_fast_rx(struct sta_ fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr2); fastrx.expected_ds_bits = 0; } else { @@ -130,7 +130,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> fastrx.da_offs = offsetof(struct ieee80211_hdr, addr1); fastrx.sa_offs = offsetof(struct ieee80211_hdr, addr3); fastrx.expected_ds_bits = -@@ -4379,11 +4375,6 @@ static bool ieee80211_invoke_fast_rx(str +@@ -4383,11 +4379,6 @@ static bool ieee80211_invoke_fast_rx(str pskb_trim(skb, skb->len - fast_rx->icv_len)) goto drop; @@ -162,7 +162,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> u8 da_offs, sa_offs; --- a/net/mac80211/status.c +++ b/net/mac80211/status.c -@@ -1227,9 +1227,6 @@ void ieee80211_tx_status_8023(struct iee +@@ -1225,9 +1225,6 @@ void ieee80211_tx_status_8023(struct iee sta->status_stats.retry_count += retry_count; if (ieee80211_hw_check(hw, REPORTS_TX_ACK_STATUS)) { diff --git a/package/kernel/mac80211/patches/subsys/322-mac80211-swap-NEED_TXPROCESSING-and-HW_80211_ENCAP-t.patch b/package/kernel/mac80211/patches/subsys/322-mac80211-swap-NEED_TXPROCESSING-and-HW_80211_ENCAP-t.patch index 8505ce56f6..d62621ca77 100644 --- a/package/kernel/mac80211/patches/subsys/322-mac80211-swap-NEED_TXPROCESSING-and-HW_80211_ENCAP-t.patch +++ b/package/kernel/mac80211/patches/subsys/322-mac80211-swap-NEED_TXPROCESSING-and-HW_80211_ENCAP-t.patch @@ -34,7 +34,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/drivers/net/wireless/ath/ath11k/mac.c +++ b/drivers/net/wireless/ath/ath11k/mac.c -@@ -3749,7 +3749,7 @@ static int ath11k_mac_mgmt_tx_wmi(struct +@@ -3898,7 +3898,7 @@ static int ath11k_mac_mgmt_tx_wmi(struct return -ENOSPC; info = IEEE80211_SKB_CB(skb); @@ -43,7 +43,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if ((ieee80211_is_action(hdr->frame_control) || ieee80211_is_deauth(hdr->frame_control) || ieee80211_is_disassoc(hdr->frame_control)) && -@@ -3876,7 +3876,7 @@ static void ath11k_mac_op_tx(struct ieee +@@ -4025,7 +4025,7 @@ static void ath11k_mac_op_tx(struct ieee bool is_prb_rsp; int ret; @@ -84,18 +84,18 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + * @IEEE80211_TX_INTCFL_NEED_TXPROCESSING: completely internal to mac80211, + * used to indicate that a pending frame requires TX processing before + * it can be sent out. + * @IEEE80211_TX_CTRL_NO_SEQNO: Do not overwrite the sequence number that + * has already been assigned to this frame. * - * These flags are used in tx_info->control.flags. - */ -@@ -835,7 +835,7 @@ enum mac80211_tx_control_flags { +@@ -837,7 +837,7 @@ enum mac80211_tx_control_flags { IEEE80211_TX_CTRL_AMSDU = BIT(3), IEEE80211_TX_CTRL_FAST_XMIT = BIT(4), IEEE80211_TX_CTRL_SKIP_MPATH_LOOKUP = BIT(5), - IEEE80211_TX_CTRL_HW_80211_ENCAP = BIT(6), + IEEE80211_TX_INTCFL_NEED_TXPROCESSING = BIT(6), + IEEE80211_TX_CTRL_NO_SEQNO = BIT(7), }; - /* --- a/net/mac80211/mesh_hwmp.c +++ b/net/mac80211/mesh_hwmp.c @@ -212,7 +212,7 @@ static void prepare_frame_for_deferred_t @@ -129,7 +129,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c -@@ -2897,7 +2897,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80 +@@ -2901,7 +2901,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80 fwd_hdr->frame_control &= ~cpu_to_le16(IEEE80211_FCTL_RETRY); info = IEEE80211_SKB_CB(fwd_skb); memset(info, 0, sizeof(*info)); @@ -153,7 +153,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> sta->status_stats.filtered++; --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -530,7 +530,7 @@ ieee80211_tx_h_unicast_ps_buf(struct iee +@@ -531,7 +531,7 @@ ieee80211_tx_h_unicast_ps_buf(struct iee info->control.jiffies = jiffies; info->control.vif = &tx->sdata->vif; @@ -162,7 +162,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> info->flags &= ~IEEE80211_TX_TEMPORARY_FLAGS; skb_queue_tail(&sta->ps_tx_buf[ac], tx->skb); spin_unlock(&sta->ps_lock); -@@ -1132,7 +1132,7 @@ static bool ieee80211_tx_prep_agg(struct +@@ -1134,7 +1134,7 @@ static bool ieee80211_tx_prep_agg(struct tx->sta->sta.addr, tx->sta->sta.aid); } info->control.vif = &tx->sdata->vif; @@ -171,7 +171,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> info->flags &= ~IEEE80211_TX_TEMPORARY_FLAGS; __skb_queue_tail(&tid_tx->pending, skb); if (skb_queue_len(&tid_tx->pending) > STA_MAX_TX_BUFFER) -@@ -1177,7 +1177,7 @@ ieee80211_tx_prepare(struct ieee80211_su +@@ -1179,7 +1179,7 @@ ieee80211_tx_prepare(struct ieee80211_su * we are doing the needed processing, so remove the flag * now. */ @@ -180,7 +180,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> hdr = (struct ieee80211_hdr *) skb->data; -@@ -1256,7 +1256,7 @@ static struct txq_info *ieee80211_get_tx +@@ -1258,7 +1258,7 @@ static struct txq_info *ieee80211_get_tx (info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE)) return NULL; @@ -189,7 +189,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> unlikely(!ieee80211_is_data_present(hdr->frame_control))) { if ((!ieee80211_is_mgmt(hdr->frame_control) || ieee80211_is_bufferable_mmpdu(hdr->frame_control) || -@@ -3640,7 +3640,7 @@ begin: +@@ -3637,7 +3637,7 @@ begin: else info->flags &= ~IEEE80211_TX_CTL_AMPDU; @@ -198,7 +198,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> goto encap_out; if (info->control.flags & IEEE80211_TX_CTRL_FAST_XMIT) { -@@ -4230,7 +4230,7 @@ static void ieee80211_8023_xmit(struct i +@@ -4227,7 +4227,7 @@ static void ieee80211_8023_xmit(struct i sdata = container_of(sdata->bss, struct ieee80211_sub_if_data, u.ap); @@ -207,7 +207,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> info->control.vif = &sdata->vif; if (key) -@@ -4355,7 +4355,7 @@ static bool ieee80211_tx_pending_skb(str +@@ -4352,7 +4352,7 @@ static bool ieee80211_tx_pending_skb(str sdata = vif_to_sdata(info->control.vif); @@ -216,10 +216,10 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf); if (unlikely(!chanctx_conf)) { dev_kfree_skb(skb); -@@ -4363,7 +4363,7 @@ static bool ieee80211_tx_pending_skb(str +@@ -4360,7 +4360,7 @@ static bool ieee80211_tx_pending_skb(str } info->band = chanctx_conf->def.chan->band; - result = ieee80211_tx(sdata, NULL, skb, true, 0); + result = ieee80211_tx(sdata, NULL, skb, true); - } else if (info->control.flags & IEEE80211_TX_CTRL_HW_80211_ENCAP) { + } else if (info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) { if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) { diff --git a/package/kernel/mac80211/patches/subsys/323-mac80211-unify-802.3-offload-and-802.11-tx-status-co.patch b/package/kernel/mac80211/patches/subsys/323-mac80211-unify-802.3-offload-and-802.11-tx-status-co.patch index 7bb54f499b..62bb917184 100644 --- a/package/kernel/mac80211/patches/subsys/323-mac80211-unify-802.3-offload-and-802.11-tx-status-co.patch +++ b/package/kernel/mac80211/patches/subsys/323-mac80211-unify-802.3-offload-and-802.11-tx-status-co.patch @@ -11,7 +11,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/status.c +++ b/net/mac80211/status.c -@@ -903,7 +903,6 @@ static void __ieee80211_tx_status(struct +@@ -901,7 +901,6 @@ static void __ieee80211_tx_status(struct struct ieee80211_bar *bar; int shift = 0; int tid = IEEE80211_NUM_TIDS; @@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> sband = local->hw.wiphy->bands[info->band]; fc = hdr->frame_control; -@@ -996,17 +995,6 @@ static void __ieee80211_tx_status(struct +@@ -994,17 +993,6 @@ static void __ieee80211_tx_status(struct ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) ieee80211_sta_tx_notify(sta->sdata, (void *) skb->data, acked, info->status.tx_time); @@ -37,7 +37,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } /* SNMP counters -@@ -1102,9 +1090,11 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1100,9 +1088,11 @@ void ieee80211_tx_status_ext(struct ieee struct ieee80211_tx_info *info = status->info; struct ieee80211_sta *pubsta = status->sta; struct ieee80211_supported_band *sband; @@ -50,7 +50,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (pubsta) { sta = container_of(pubsta, struct sta_info, sta); -@@ -1156,7 +1146,18 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1154,7 +1144,18 @@ void ieee80211_tx_status_ext(struct ieee ieee80211s_update_metric(local, sta, status); } @@ -70,7 +70,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> return __ieee80211_tx_status(hw, status, rates_idx, retry_count); -@@ -1171,6 +1172,12 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1169,6 +1170,12 @@ void ieee80211_tx_status_ext(struct ieee } else { I802_DEBUG_INC(local->dot11FailedCount); } @@ -83,7 +83,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } EXPORT_SYMBOL(ieee80211_tx_status_ext); -@@ -1197,66 +1204,23 @@ void ieee80211_tx_status_8023(struct iee +@@ -1195,66 +1202,23 @@ void ieee80211_tx_status_8023(struct iee struct ieee80211_vif *vif, struct sk_buff *skb) { diff --git a/package/kernel/mac80211/patches/subsys/324-mac80211-support-using-ieee80211_tx_status_ext-to-fr.patch b/package/kernel/mac80211/patches/subsys/324-mac80211-support-using-ieee80211_tx_status_ext-to-fr.patch index 5469a419bf..ffb89a4d4a 100644 --- a/package/kernel/mac80211/patches/subsys/324-mac80211-support-using-ieee80211_tx_status_ext-to-fr.patch +++ b/package/kernel/mac80211/patches/subsys/324-mac80211-support-using-ieee80211_tx_status_ext-to-fr.patch @@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/status.c +++ b/net/mac80211/status.c -@@ -1103,6 +1103,21 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1101,6 +1101,21 @@ void ieee80211_tx_status_ext(struct ieee sta->tx_stats.last_rate_info = *status->rate; } @@ -35,7 +35,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> rates_idx = ieee80211_tx_get_rates(hw, info, &retry_count); sband = hw->wiphy->bands[info->band]; -@@ -1146,17 +1161,6 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1144,17 +1159,6 @@ void ieee80211_tx_status_ext(struct ieee ieee80211s_update_metric(local, sta, status); } @@ -53,7 +53,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (skb && !(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP)) return __ieee80211_tx_status(hw, status, rates_idx, retry_count); -@@ -1173,6 +1177,7 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1171,6 +1175,7 @@ void ieee80211_tx_status_ext(struct ieee I802_DEBUG_INC(local->dot11FailedCount); } diff --git a/package/kernel/mac80211/patches/subsys/325-mac80211-extend-ieee80211_tx_status_ext-to-support-b.patch b/package/kernel/mac80211/patches/subsys/325-mac80211-extend-ieee80211_tx_status_ext-to-support-b.patch index e8b29bb4c5..b5dcb0b013 100644 --- a/package/kernel/mac80211/patches/subsys/325-mac80211-extend-ieee80211_tx_status_ext-to-support-b.patch +++ b/package/kernel/mac80211/patches/subsys/325-mac80211-extend-ieee80211_tx_status_ext-to-support-b.patch @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -1092,12 +1092,14 @@ ieee80211_info_get_tx_time_est(struct ie +@@ -1095,12 +1095,14 @@ ieee80211_info_get_tx_time_est(struct ie * @info: Basic tx status information * @skb: Packet skb (can be NULL if not provided by the driver) * @rate: The TX rate that was used when sending the packet @@ -27,7 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /** --- a/net/mac80211/status.c +++ b/net/mac80211/status.c -@@ -1053,7 +1053,10 @@ static void __ieee80211_tx_status(struct +@@ -1051,7 +1051,10 @@ static void __ieee80211_tx_status(struct * with this test... */ if (!local->monitors && (!send_to_cooked || !local->cooked_mntrs)) { @@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> return; } -@@ -1182,7 +1185,10 @@ free: +@@ -1180,7 +1183,10 @@ free: return; ieee80211_report_used_skb(local, skb, false); diff --git a/package/kernel/mac80211/patches/subsys/326-mac80211-notify-the-driver-when-a-sta-uses-4-address.patch b/package/kernel/mac80211/patches/subsys/326-mac80211-notify-the-driver-when-a-sta-uses-4-address.patch index aa166c6431..f38afc7912 100644 --- a/package/kernel/mac80211/patches/subsys/326-mac80211-notify-the-driver-when-a-sta-uses-4-address.patch +++ b/package/kernel/mac80211/patches/subsys/326-mac80211-notify-the-driver-when-a-sta-uses-4-address.patch @@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -3840,6 +3840,8 @@ enum ieee80211_reconfig_type { +@@ -3843,6 +3843,8 @@ enum ieee80211_reconfig_type { * This callback may sleep. * @update_vif_config: Update virtual interface offload flags * This callback may sleep. @@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> */ struct ieee80211_ops { void (*tx)(struct ieee80211_hw *hw, -@@ -4153,6 +4155,8 @@ struct ieee80211_ops { +@@ -4156,6 +4158,8 @@ struct ieee80211_ops { struct ieee80211_sta *sta, u8 tids); void (*update_vif_offload)(struct ieee80211_hw *hw, struct ieee80211_vif *vif); @@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /** --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -1694,6 +1694,7 @@ static int ieee80211_change_station(stru +@@ -1696,6 +1696,7 @@ static int ieee80211_change_station(stru rcu_assign_pointer(vlansdata->u.vlan.sta, sta); __ieee80211_check_fast_rx_iface(vlansdata); @@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (sta->sdata->vif.type == NL80211_IFTYPE_AP_VLAN && --- a/net/mac80211/driver-ops.h +++ b/net/mac80211/driver-ops.h -@@ -1400,4 +1400,18 @@ static inline void drv_update_vif_offloa +@@ -1399,4 +1399,18 @@ static inline void drv_update_vif_offloa trace_drv_return_void(local); } @@ -61,7 +61,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> #endif /* __MAC80211_DRIVER_OPS */ --- a/net/mac80211/mlme.c +++ b/net/mac80211/mlme.c -@@ -3518,6 +3518,9 @@ static bool ieee80211_assoc_success(stru +@@ -3523,6 +3523,9 @@ static bool ieee80211_assoc_success(stru goto out; } @@ -73,7 +73,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> /* --- a/net/mac80211/trace.h +++ b/net/mac80211/trace.h -@@ -2739,6 +2739,33 @@ DEFINE_EVENT(local_sdata_addr_evt, drv_u +@@ -2740,6 +2740,33 @@ DEFINE_EVENT(local_sdata_addr_evt, drv_u TP_ARGS(local, sdata) ); diff --git a/package/kernel/mac80211/patches/subsys/327-mac80211-reorganize-code-to-remove-a-forward-declara.patch b/package/kernel/mac80211/patches/subsys/327-mac80211-reorganize-code-to-remove-a-forward-declara.patch index a3d600152c..0bfb10cdb0 100644 --- a/package/kernel/mac80211/patches/subsys/327-mac80211-reorganize-code-to-remove-a-forward-declara.patch +++ b/package/kernel/mac80211/patches/subsys/327-mac80211-reorganize-code-to-remove-a-forward-declara.patch @@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> bool __ieee80211_recalc_txpower(struct ieee80211_sub_if_data *sdata) { -@@ -349,6 +348,511 @@ static int ieee80211_check_queues(struct +@@ -349,6 +348,518 @@ static int ieee80211_check_queues(struct return 0; } @@ -220,7 +220,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + case NL80211_IFTYPE_P2P_DEVICE: + /* relies on synchronize_rcu() below */ + RCU_INIT_POINTER(local->p2p_sdata, NULL); -+ /* fall through */ ++ fallthrough; + default: + cancel_work_sync(&sdata->work); + /* @@ -290,7 +290,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + if (!(sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE)) + break; + -+ /* fall through */ ++ fallthrough; + default: + if (going_down) + drv_remove_interface(local, sdata); @@ -481,17 +481,24 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> +{ + struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); + struct ieee80211_local *local = sdata->local; ++ struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); + struct ieee80211_hdr *hdr; -+ struct ieee80211_radiotap_header *rtap = (void *)skb->data; ++ int len_rthdr; + + if (local->hw.queues < IEEE80211_NUM_ACS) + return 0; + -+ if (skb->len < 4 || -+ skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */) ++ /* reset flags and info before parsing radiotap header */ ++ memset(info, 0, sizeof(*info)); ++ ++ if (!ieee80211_parse_tx_radiotap(skb, dev)) + return 0; /* doesn't matter, frame will be dropped */ + -+ hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len)); ++ len_rthdr = ieee80211_get_radiotap_len(skb->data); ++ hdr = (struct ieee80211_hdr *)(skb->data + len_rthdr); ++ if (skb->len < len_rthdr + 2 || ++ skb->len < len_rthdr + ieee80211_hdrlen(hdr->frame_control)) ++ return 0; /* doesn't matter, frame will be dropped */ + + return ieee80211_select_queue_80211(sdata, skb, hdr); +} @@ -531,7 +538,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> static bool ieee80211_iftype_supports_encap_offload(enum nl80211_iftype iftype) { switch (iftype) { -@@ -389,6 +893,31 @@ static bool ieee80211_set_sdata_offload_ +@@ -389,6 +900,31 @@ static bool ieee80211_set_sdata_offload_ return true; } @@ -563,7 +570,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> static void ieee80211_recalc_sdata_offload(struct ieee80211_sub_if_data *sdata) { -@@ -866,511 +1395,6 @@ int ieee80211_do_open(struct wireless_de +@@ -866,518 +1402,6 @@ int ieee80211_do_open(struct wireless_de return res; } @@ -764,7 +771,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - case NL80211_IFTYPE_P2P_DEVICE: - /* relies on synchronize_rcu() below */ - RCU_INIT_POINTER(local->p2p_sdata, NULL); -- /* fall through */ +- fallthrough; - default: - cancel_work_sync(&sdata->work); - /* @@ -834,7 +841,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - if (!(sdata->u.mntr.flags & MONITOR_FLAG_ACTIVE)) - break; - -- /* fall through */ +- fallthrough; - default: - if (going_down) - drv_remove_interface(local, sdata); @@ -1025,17 +1032,24 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> -{ - struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); - struct ieee80211_local *local = sdata->local; +- struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb); - struct ieee80211_hdr *hdr; -- struct ieee80211_radiotap_header *rtap = (void *)skb->data; +- int len_rthdr; - - if (local->hw.queues < IEEE80211_NUM_ACS) - return 0; - -- if (skb->len < 4 || -- skb->len < le16_to_cpu(rtap->it_len) + 2 /* frame control */) +- /* reset flags and info before parsing radiotap header */ +- memset(info, 0, sizeof(*info)); +- +- if (!ieee80211_parse_tx_radiotap(skb, dev)) - return 0; /* doesn't matter, frame will be dropped */ - -- hdr = (void *)((u8 *)skb->data + le16_to_cpu(rtap->it_len)); +- len_rthdr = ieee80211_get_radiotap_len(skb->data); +- hdr = (struct ieee80211_hdr *)(skb->data + len_rthdr); +- if (skb->len < len_rthdr + 2 || +- skb->len < len_rthdr + ieee80211_hdrlen(hdr->frame_control)) +- return 0; /* doesn't matter, frame will be dropped */ - - return ieee80211_select_queue_80211(sdata, skb, hdr); -} @@ -1075,7 +1089,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> static void ieee80211_if_free(struct net_device *dev) { free_percpu(netdev_tstats(dev)); -@@ -1401,32 +1425,6 @@ static void ieee80211_if_setup_no_queue( +@@ -1408,32 +1432,6 @@ static void ieee80211_if_setup_no_queue( #endif } diff --git a/package/kernel/mac80211/patches/subsys/328-mac80211-extend-AQL-aggregation-estimation-to-HE-and.patch b/package/kernel/mac80211/patches/subsys/328-mac80211-extend-AQL-aggregation-estimation-to-HE-and.patch deleted file mode 100644 index 3d687f8341..0000000000 --- a/package/kernel/mac80211/patches/subsys/328-mac80211-extend-AQL-aggregation-estimation-to-HE-and.patch +++ /dev/null @@ -1,49 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Thu, 27 Aug 2020 12:44:36 +0200 -Subject: [PATCH] mac80211: extend AQL aggregation estimation to HE and fix - unit mismatch - -The unit of the return value of ieee80211_get_rate_duration is nanoseconds, not -milliseconds. Adjust the duration checks to account for that. -For higher data rates, allow larger estimated aggregation sizes, and add some -values for HE as well, which can use much larger aggregates. -Since small packets with high data rates can now lead to duration values too -small for info->tx_time_est, return a minimum of 4us. - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/airtime.c -+++ b/net/mac80211/airtime.c -@@ -668,20 +668,26 @@ u32 ieee80211_calc_expected_tx_airtime(s - * This will not be very accurate, but much better than simply - * assuming un-aggregated tx in all cases. - */ -- if (duration > 400) /* <= VHT20 MCS2 1S */ -+ if (duration > 400 * 1024) /* <= VHT20 MCS2 1S */ - agg_shift = 1; -- else if (duration > 250) /* <= VHT20 MCS3 1S or MCS1 2S */ -+ else if (duration > 250 * 1024) /* <= VHT20 MCS3 1S or MCS1 2S */ - agg_shift = 2; -- else if (duration > 150) /* <= VHT20 MCS5 1S or MCS3 2S */ -+ else if (duration > 150 * 1024) /* <= VHT20 MCS5 1S or MCS2 2S */ - agg_shift = 3; -- else -+ else if (duration > 70 * 1024) /* <= VHT20 MCS5 2S */ - agg_shift = 4; -+ else if (stat.encoding != RX_ENC_HE || -+ duration > 20 * 1024) /* <= HE40 MCS6 2S */ -+ agg_shift = 5; -+ else -+ agg_shift = 6; - - duration *= len; - duration /= AVG_PKT_SIZE; - duration /= 1024; -+ duration += (overhead >> agg_shift); - -- return duration + (overhead >> agg_shift); -+ return max_t(u32, duration, 4); - } - - if (!conf) diff --git a/package/kernel/mac80211/patches/subsys/329-mac80211-add-AQL-support-for-VHT160-tx-rates.patch b/package/kernel/mac80211/patches/subsys/329-mac80211-add-AQL-support-for-VHT160-tx-rates.patch deleted file mode 100644 index e22a09e711..0000000000 --- a/package/kernel/mac80211/patches/subsys/329-mac80211-add-AQL-support-for-VHT160-tx-rates.patch +++ /dev/null @@ -1,23 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Thu, 27 Aug 2020 12:47:48 +0200 -Subject: [PATCH] mac80211: add AQL support for VHT160 tx rates - -When converting from struct ieee80211_tx_rate to ieee80211_rx_status, -there was one check missing to fill in the bandwidth for 160 MHz - -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/airtime.c -+++ b/net/mac80211/airtime.c -@@ -560,7 +560,9 @@ static int ieee80211_fill_rx_status(stru - if (rate->idx < 0 || !rate->count) - return -1; - -- if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH) -+ if (rate->flags & IEEE80211_TX_RC_160_MHZ_WIDTH) -+ stat->bw = RATE_INFO_BW_160; -+ else if (rate->flags & IEEE80211_TX_RC_80_MHZ_WIDTH) - stat->bw = RATE_INFO_BW_80; - else if (rate->flags & IEEE80211_TX_RC_40_MHZ_WIDTH) - stat->bw = RATE_INFO_BW_40; diff --git a/package/kernel/mac80211/patches/subsys/332-mac80211-fix-regression-in-sta-connection-monitor.patch b/package/kernel/mac80211/patches/subsys/332-mac80211-fix-regression-in-sta-connection-monitor.patch index cff8045c05..93a9eca51f 100644 --- a/package/kernel/mac80211/patches/subsys/332-mac80211-fix-regression-in-sta-connection-monitor.patch +++ b/package/kernel/mac80211/patches/subsys/332-mac80211-fix-regression-in-sta-connection-monitor.patch @@ -13,7 +13,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/status.c +++ b/net/mac80211/status.c -@@ -991,10 +991,6 @@ static void __ieee80211_tx_status(struct +@@ -989,10 +989,6 @@ static void __ieee80211_tx_status(struct if (!(info->flags & IEEE80211_TX_CTL_INJECTED) && acked) ieee80211_frame_acked(sta, skb); @@ -24,7 +24,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> } /* SNMP counters -@@ -1129,11 +1125,18 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1127,11 +1123,18 @@ void ieee80211_tx_status_ext(struct ieee noack_success = !!(info->flags & IEEE80211_TX_STAT_NOACK_TRANSMITTED); if (pubsta) { @@ -43,7 +43,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (acked) { sta->status_stats.last_ack = jiffies; -@@ -1143,6 +1146,11 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1141,6 +1144,11 @@ void ieee80211_tx_status_ext(struct ieee /* Track when last packet was ACKed */ sta->status_stats.last_pkt_time = jiffies; diff --git a/package/kernel/mac80211/patches/subsys/333-mac80211-fix-memory-leak-on-filtered-powersave-frame.patch b/package/kernel/mac80211/patches/subsys/333-mac80211-fix-memory-leak-on-filtered-powersave-frame.patch index cdbbcf5d06..e518f5134f 100644 --- a/package/kernel/mac80211/patches/subsys/333-mac80211-fix-memory-leak-on-filtered-powersave-frame.patch +++ b/package/kernel/mac80211/patches/subsys/333-mac80211-fix-memory-leak-on-filtered-powersave-frame.patch @@ -24,7 +24,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> ieee80211_free_txskb(&local->hw, skb); return; } -@@ -924,15 +925,6 @@ static void __ieee80211_tx_status(struct +@@ -922,15 +923,6 @@ static void __ieee80211_tx_status(struct ieee80211_mpsp_trigger_process( ieee80211_get_qos_ctl(hdr), sta, true, acked); @@ -40,7 +40,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> if (ieee80211_hw_check(&local->hw, HAS_RATE_CONTROL) && (ieee80211_is_data(hdr->frame_control)) && (rates_idx != -1)) -@@ -1159,6 +1151,12 @@ void ieee80211_tx_status_ext(struct ieee +@@ -1157,6 +1149,12 @@ void ieee80211_tx_status_ext(struct ieee -info->status.ack_signal); } } else if (test_sta_flag(sta, WLAN_STA_PS_STA)) { diff --git a/package/kernel/mac80211/patches/subsys/334-mac80211-minstrel-remove-deferred-sampling-code.patch b/package/kernel/mac80211/patches/subsys/334-mac80211-minstrel-remove-deferred-sampling-code.patch deleted file mode 100644 index e3a877fb94..0000000000 --- a/package/kernel/mac80211/patches/subsys/334-mac80211-minstrel-remove-deferred-sampling-code.patch +++ /dev/null @@ -1,96 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Wed, 11 Nov 2020 19:17:44 +0100 -Subject: [PATCH] mac80211: minstrel: remove deferred sampling code - -Deferring sampling attempts to the second stage has some bad interactions -with drivers that process the rate table in hardware and use the probe flag -to indicate probing packets (e.g. most mt76 drivers). On affected drivers -it can lead to probing not working at all. - -If the link conditions turn worse, it might not be such a good idea to -do a lot of sampling for lower rates in this case. - -Fix this by simply skipping the sample attempt instead of deferring it, -but keep the checks that would allow it to be sampled if it was skipped -too often, but only if it has less than 95% success probability. - -Also ensure that IEEE80211_TX_CTL_RATE_CTRL_PROBE is set for all probing -packets. - -Cc: stable@vger.kernel.org -Fixes: cccf129f820e ("mac80211: add the 'minstrel' rate control algorithm") -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/rc80211_minstrel.c -+++ b/net/mac80211/rc80211_minstrel.c -@@ -287,12 +287,6 @@ minstrel_tx_status(void *priv, struct ie - mi->r[ndx].stats.success += success; - } - -- if ((info->flags & IEEE80211_TX_CTL_RATE_CTRL_PROBE) && (i >= 0)) -- mi->sample_packets++; -- -- if (mi->sample_deferred > 0) -- mi->sample_deferred--; -- - if (time_after(jiffies, mi->last_stats_update + - mp->update_interval / (mp->new_avg ? 2 : 1))) - minstrel_update_stats(mp, mi); -@@ -367,7 +361,7 @@ minstrel_get_rate(void *priv, struct iee - return; - - delta = (mi->total_packets * sampling_ratio / 100) - -- (mi->sample_packets + mi->sample_deferred / 2); -+ mi->sample_packets; - - /* delta < 0: no sampling required */ - prev_sample = mi->prev_sample; -@@ -376,7 +370,6 @@ minstrel_get_rate(void *priv, struct iee - return; - - if (mi->total_packets >= 10000) { -- mi->sample_deferred = 0; - mi->sample_packets = 0; - mi->total_packets = 0; - } else if (delta > mi->n_rates * 2) { -@@ -401,19 +394,8 @@ minstrel_get_rate(void *priv, struct iee - * rate sampling method should be used. - * Respect such rates that are not sampled for 20 interations. - */ -- if (mrr_capable && -- msr->perfect_tx_time > mr->perfect_tx_time && -- msr->stats.sample_skipped < 20) { -- /* Only use IEEE80211_TX_CTL_RATE_CTRL_PROBE to mark -- * packets that have the sampling rate deferred to the -- * second MRR stage. Increase the sample counter only -- * if the deferred sample rate was actually used. -- * Use the sample_deferred counter to make sure that -- * the sampling is not done in large bursts */ -- info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; -- rate++; -- mi->sample_deferred++; -- } else { -+ if (msr->perfect_tx_time < mr->perfect_tx_time || -+ msr->stats.sample_skipped >= 20) { - if (!msr->sample_limit) - return; - -@@ -433,6 +415,7 @@ minstrel_get_rate(void *priv, struct iee - - rate->idx = mi->r[ndx].rix; - rate->count = minstrel_get_retry_count(&mi->r[ndx], info); -+ info->flags |= IEEE80211_TX_CTL_RATE_CTRL_PROBE; - } - - ---- a/net/mac80211/rc80211_minstrel.h -+++ b/net/mac80211/rc80211_minstrel.h -@@ -126,7 +126,6 @@ struct minstrel_sta_info { - u8 max_prob_rate; - unsigned int total_packets; - unsigned int sample_packets; -- int sample_deferred; - - unsigned int sample_row; - unsigned int sample_column; diff --git a/package/kernel/mac80211/patches/subsys/335-mac80211-minstrel-fix-tx-status-processing-corner-ca.patch b/package/kernel/mac80211/patches/subsys/335-mac80211-minstrel-fix-tx-status-processing-corner-ca.patch deleted file mode 100644 index b1c339a1e6..0000000000 --- a/package/kernel/mac80211/patches/subsys/335-mac80211-minstrel-fix-tx-status-processing-corner-ca.patch +++ /dev/null @@ -1,26 +0,0 @@ -From: Felix Fietkau <nbd@nbd.name> -Date: Wed, 11 Nov 2020 19:25:39 +0100 -Subject: [PATCH] mac80211: minstrel: fix tx status processing corner case - -Some drivers fill the status rate list without setting the rate index after -the final rate to -1. minstrel_ht already deals with this, but minstrel -doesn't, which causes it to get stuck at the lowest rate on these drivers. - -Fix this by checking the count as well. - -Cc: stable@vger.kernel.org -Fixes: cccf129f820e ("mac80211: add the 'minstrel' rate control algorithm") -Signed-off-by: Felix Fietkau <nbd@nbd.name> ---- - ---- a/net/mac80211/rc80211_minstrel.c -+++ b/net/mac80211/rc80211_minstrel.c -@@ -274,7 +274,7 @@ minstrel_tx_status(void *priv, struct ie - success = !!(info->flags & IEEE80211_TX_STAT_ACK); - - for (i = 0; i < IEEE80211_TX_MAX_RATES; i++) { -- if (ar[i].idx < 0) -+ if (ar[i].idx < 0 || !ar[i].count) - break; - - ndx = rix_to_ndx(mi, ar[i].idx); diff --git a/package/kernel/mac80211/patches/subsys/336-mac80211-do-not-drop-tx-nulldata-packets-on-encrypte.patch b/package/kernel/mac80211/patches/subsys/336-mac80211-do-not-drop-tx-nulldata-packets-on-encrypte.patch index 378c37455d..d3fb3875f6 100644 --- a/package/kernel/mac80211/patches/subsys/336-mac80211-do-not-drop-tx-nulldata-packets-on-encrypte.patch +++ b/package/kernel/mac80211/patches/subsys/336-mac80211-do-not-drop-tx-nulldata-packets-on-encrypte.patch @@ -14,7 +14,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> --- a/net/mac80211/tx.c +++ b/net/mac80211/tx.c -@@ -657,7 +657,7 @@ ieee80211_tx_h_select_key(struct ieee802 +@@ -658,7 +658,7 @@ ieee80211_tx_h_select_key(struct ieee802 if (!skip_hw && tx->key && tx->key->flags & KEY_FLAG_UPLOADED_TO_HARDWARE) info->control.hw_key = &tx->key->conf; diff --git a/package/kernel/mac80211/patches/subsys/341-mac80211-minstrel_ht-improve-ampdu-length-estimation.patch b/package/kernel/mac80211/patches/subsys/341-mac80211-minstrel_ht-improve-ampdu-length-estimation.patch index f450ca9ca9..a8e6e89954 100644 --- a/package/kernel/mac80211/patches/subsys/341-mac80211-minstrel_ht-improve-ampdu-length-estimation.patch +++ b/package/kernel/mac80211/patches/subsys/341-mac80211-minstrel_ht-improve-ampdu-length-estimation.patch @@ -27,8 +27,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - if (!mi->avg_ampdu_len) - return AVG_AMPDU_SIZE; + int duration; - -- return MINSTREL_TRUNC(mi->avg_ampdu_len); ++ + if (mi->avg_ampdu_len) + return MINSTREL_TRUNC(mi->avg_ampdu_len); + @@ -36,7 +35,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + return 1; + + duration = minstrel_get_duration(mi->max_tp_rate[0]); -+ + +- return MINSTREL_TRUNC(mi->avg_ampdu_len); + if (duration > 400 * 1000) + return 2; + diff --git a/package/kernel/mac80211/patches/subsys/349-mac80211-minstrel_ht-significantly-redesign-the-rate.patch b/package/kernel/mac80211/patches/subsys/349-mac80211-minstrel_ht-significantly-redesign-the-rate.patch index 7af13661a8..09f6fd2214 100644 --- a/package/kernel/mac80211/patches/subsys/349-mac80211-minstrel_ht-significantly-redesign-the-rate.patch +++ b/package/kernel/mac80211/patches/subsys/349-mac80211-minstrel_ht-significantly-redesign-the-rate.patch @@ -179,14 +179,14 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + if (!rate) return; - } - +- - i = 0; - if (n_rates > 1) { - random = prandom_u32(); - i = random % n_rates; - } - probe_rate = rates[i]; -- + -out: - mi->sample_rate = probe_rate; + mi->sample_rate = rate; @@ -584,13 +584,13 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - - if (!(mi->supported[sample_group] & BIT(sample_idx))) - return -1; -- ++ u8 seq; + - mrs = &mg->rates[sample_idx]; - sample_idx += MI_RATE(sample_group, 0); - - tp_rate1 = mi->max_tp_rate[0]; -+ u8 seq; - +- - /* Set tp_rate2 to the second highest max_tp_rate */ - if (minstrel_get_duration(mi->max_tp_rate[0]) > - minstrel_get_duration(mi->max_tp_rate[1])) { @@ -673,8 +673,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> - else - sample_idx = minstrel_get_sample_rate(mp, mi); + return; - -- if (sample_idx < 0) ++ + if (mp->hw->max_rates == 1 && mp->sample_switch && + (mi->total_packets_cur >= SAMPLE_SWITCH_THR || + mp->sample_switch == 1)) @@ -682,7 +681,8 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name> + + if (time_is_before_jiffies(mi->sample_time)) + return; -+ + +- if (sample_idx < 0) + mi->sample_time = jiffies + MINSTREL_SAMPLE_INTERVAL; + sample_idx = minstrel_ht_get_sample_rate(mp, mi); + if (!sample_idx) diff --git a/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch b/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch index 6abf3a1261..683c9950d6 100644 --- a/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch +++ b/package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch @@ -1,6 +1,6 @@ --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h -@@ -3610,6 +3610,7 @@ struct mgmt_frame_regs { +@@ -3637,6 +3637,7 @@ struct mgmt_frame_regs { * (as advertised by the nl80211 feature flag.) * @get_tx_power: store the current TX power into the dbm variable; * return 0 if successful @@ -8,7 +8,7 @@ * * @set_wds_peer: set the WDS peer for a WDS interface * -@@ -3932,6 +3933,7 @@ struct cfg80211_ops { +@@ -3959,6 +3960,7 @@ struct cfg80211_ops { enum nl80211_tx_power_setting type, int mbm); int (*get_tx_power)(struct wiphy *wiphy, struct wireless_dev *wdev, int *dbm); @@ -18,7 +18,7 @@ const u8 *addr); --- a/include/net/mac80211.h +++ b/include/net/mac80211.h -@@ -1521,6 +1521,7 @@ enum ieee80211_smps_mode { +@@ -1524,6 +1524,7 @@ enum ieee80211_smps_mode { * * @power_level: requested transmit power (in dBm), backward compatibility * value only that is set to the minimum of all interfaces @@ -26,7 +26,7 @@ * * @chandef: the channel definition to tune to * @radar_enabled: whether radar detection is enabled -@@ -1541,6 +1542,7 @@ enum ieee80211_smps_mode { +@@ -1544,6 +1545,7 @@ enum ieee80211_smps_mode { struct ieee80211_conf { u32 flags; int power_level, dynamic_ps_timeout; @@ -36,7 +36,7 @@ u8 ps_dtim_period; --- a/include/uapi/linux/nl80211.h +++ b/include/uapi/linux/nl80211.h -@@ -2505,6 +2505,9 @@ enum nl80211_commands { +@@ -2515,6 +2515,9 @@ enum nl80211_commands { * @NL80211_ATTR_HE_6GHZ_CAPABILITY: HE 6 GHz Band Capability element (from * association request when used with NL80211_CMD_NEW_STATION). * @@ -46,7 +46,7 @@ * @NUM_NL80211_ATTR: total number of nl80211_attrs available * @NL80211_ATTR_MAX: highest attribute number currently defined * @__NL80211_ATTR_AFTER_LAST: internal use -@@ -2987,6 +2990,8 @@ enum nl80211_attrs { +@@ -2997,6 +3000,8 @@ enum nl80211_attrs { NL80211_ATTR_HE_6GHZ_CAPABILITY, @@ -57,7 +57,7 @@ __NL80211_ATTR_AFTER_LAST, --- a/net/mac80211/cfg.c +++ b/net/mac80211/cfg.c -@@ -2612,6 +2612,19 @@ static int ieee80211_get_tx_power(struct +@@ -2619,6 +2619,19 @@ static int ieee80211_get_tx_power(struct return 0; } @@ -77,7 +77,7 @@ static int ieee80211_set_wds_peer(struct wiphy *wiphy, struct net_device *dev, const u8 *addr) { -@@ -4042,6 +4055,7 @@ const struct cfg80211_ops mac80211_confi +@@ -4049,6 +4062,7 @@ const struct cfg80211_ops mac80211_confi .set_wiphy_params = ieee80211_set_wiphy_params, .set_tx_power = ieee80211_set_tx_power, .get_tx_power = ieee80211_get_tx_power, @@ -87,7 +87,7 @@ CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd) --- a/net/mac80211/ieee80211_i.h +++ b/net/mac80211/ieee80211_i.h -@@ -1383,6 +1383,7 @@ struct ieee80211_local { +@@ -1386,6 +1386,7 @@ struct ieee80211_local { int dynamic_ps_forced_timeout; int user_power_level; /* in dBm, for all interfaces */ |