mac80211: Update to version 5.9.12-1
authorHauke Mehrtens <hauke@hauke-m.de>
Sat, 7 Nov 2020 16:50:20 +0000 (17:50 +0100)
committerHauke Mehrtens <hauke@hauke-m.de>
Sun, 14 Feb 2021 14:13:40 +0000 (15:13 +0100)
The removed patches were applied upstream.

Remove the 300-mac80211-optimize-skb-resizing.patch.
This patch was not applied upstream, but it conflicts with upstream
changes and needs bigger changes. It was applied with Felix to remove
this patch for now. It should be reworked and then send upstream later.

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
53 files changed:
package/kernel/mac80211/Makefile
package/kernel/mac80211/patches/ath/404-regd_no_assoc_hints.patch
package/kernel/mac80211/patches/ath/930-ath10k_add_tpt_led_trigger.patch
package/kernel/mac80211/patches/ath/975-ath10k-use-tpt-trigger-by-default.patch
package/kernel/mac80211/patches/ath/980-ath10k-fix-max-antenna-gain-unit.patch
package/kernel/mac80211/patches/ath/981-ath10k-adjust-tx-power-reduction-for-US-regulatory-d.patch
package/kernel/mac80211/patches/brcm/860-brcmfmac-register-wiphy-s-during-module_init.patch
package/kernel/mac80211/patches/brcm/862-brcmfmac-Disable-power-management.patch
package/kernel/mac80211/patches/brcm/863-brcmfmac-add-in-driver-tables-with-country-codes.patch
package/kernel/mac80211/patches/brcm/998-survey.patch
package/kernel/mac80211/patches/build/015-ipw200-mtu.patch
package/kernel/mac80211/patches/build/060-no_local_ssb_bcma.patch
package/kernel/mac80211/patches/rt2x00/602-rt2x00-introduce-rt2x00eeprom.patch
package/kernel/mac80211/patches/subsys/070-backports-add-netif_receive_skb_list.patch [deleted file]
package/kernel/mac80211/patches/subsys/071-backports-add-skb_list_del_init.patch [deleted file]
package/kernel/mac80211/patches/subsys/072-backports-add-sched_set_fifo_low.patch [deleted file]
package/kernel/mac80211/patches/subsys/073-backports-backport-tasklet_setup-from_tasklet.patch [deleted file]
package/kernel/mac80211/patches/subsys/100-remove-cryptoapi-dependencies.patch
package/kernel/mac80211/patches/subsys/110-mac80211_keep_keys_on_stop_ap.patch
package/kernel/mac80211/patches/subsys/210-ap_scan.patch
package/kernel/mac80211/patches/subsys/300-mac80211-optimize-skb-resizing.patch [deleted file]
package/kernel/mac80211/patches/subsys/304-mac80211-sta-randomize-BA-session-dialog-token-alloc.patch
package/kernel/mac80211/patches/subsys/305-mac80211-improve-AQL-tx-airtime-estimation.patch [deleted file]
package/kernel/mac80211/patches/subsys/307-mac80211-add-a-function-for-running-rx-without-passi.patch [deleted file]
package/kernel/mac80211/patches/subsys/308-net-fq_impl-use-skb_get_hash-instead-of-skb_get_hash.patch [deleted file]
package/kernel/mac80211/patches/subsys/309-mac80211-calculcate-skb-hash-early-when-using-itxq.patch [deleted file]
package/kernel/mac80211/patches/subsys/311-mac80211-use-rate-provided-via-status-rate-on-ieee80.patch [deleted file]
package/kernel/mac80211/patches/subsys/312-mac80211-factor-out-code-to-look-up-the-average-pack.patch [deleted file]
package/kernel/mac80211/patches/subsys/313-mac80211-improve-AQL-aggregation-estimation-for-low-.patch [deleted file]
package/kernel/mac80211/patches/subsys/314-mac80211-add-missing-queue-hash-initialization-to-80.patch [deleted file]
package/kernel/mac80211/patches/subsys/315-mac80211-check-and-refresh-aggregation-session-in-en.patch
package/kernel/mac80211/patches/subsys/316-mac80211-skip-encap-offload-for-tx-multicast-control.patch
package/kernel/mac80211/patches/subsys/317-mac80211-set-info-control.hw_key-for-encap-offload-p.patch
package/kernel/mac80211/patches/subsys/318-mac80211-rework-tx-encapsulation-offload-API.patch
package/kernel/mac80211/patches/subsys/319-mac80211-reduce-duplication-in-tx-status-functions.patch
package/kernel/mac80211/patches/subsys/320-mac80211-remove-tx-status-call-to-ieee80211_sta_regi.patch
package/kernel/mac80211/patches/subsys/321-mac80211-optimize-station-connection-monitor.patch
package/kernel/mac80211/patches/subsys/322-mac80211-swap-NEED_TXPROCESSING-and-HW_80211_ENCAP-t.patch
package/kernel/mac80211/patches/subsys/323-mac80211-unify-802.3-offload-and-802.11-tx-status-co.patch
package/kernel/mac80211/patches/subsys/324-mac80211-support-using-ieee80211_tx_status_ext-to-fr.patch
package/kernel/mac80211/patches/subsys/325-mac80211-extend-ieee80211_tx_status_ext-to-support-b.patch
package/kernel/mac80211/patches/subsys/326-mac80211-notify-the-driver-when-a-sta-uses-4-address.patch
package/kernel/mac80211/patches/subsys/327-mac80211-reorganize-code-to-remove-a-forward-declara.patch
package/kernel/mac80211/patches/subsys/328-mac80211-extend-AQL-aggregation-estimation-to-HE-and.patch [deleted file]
package/kernel/mac80211/patches/subsys/329-mac80211-add-AQL-support-for-VHT160-tx-rates.patch [deleted file]
package/kernel/mac80211/patches/subsys/332-mac80211-fix-regression-in-sta-connection-monitor.patch
package/kernel/mac80211/patches/subsys/333-mac80211-fix-memory-leak-on-filtered-powersave-frame.patch
package/kernel/mac80211/patches/subsys/334-mac80211-minstrel-remove-deferred-sampling-code.patch [deleted file]
package/kernel/mac80211/patches/subsys/335-mac80211-minstrel-fix-tx-status-processing-corner-ca.patch [deleted file]
package/kernel/mac80211/patches/subsys/336-mac80211-do-not-drop-tx-nulldata-packets-on-encrypte.patch
package/kernel/mac80211/patches/subsys/341-mac80211-minstrel_ht-improve-ampdu-length-estimation.patch
package/kernel/mac80211/patches/subsys/349-mac80211-minstrel_ht-significantly-redesign-the-rate.patch
package/kernel/mac80211/patches/subsys/500-mac80211_configure_antenna_gain.patch

index 096225754c31d023a26e4165d0eacac4450a41ab..283e1798b2336c4003a7abafc1ad73a76358932a 100644 (file)
@@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
 
 PKG_NAME:=mac80211
 
-PKG_VERSION:=5.8.18-1
-PKG_RELEASE:=5
-PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.8.18/
-PKG_HASH:=f04a8172423c6a945fc7d9844b04f33fda9ae574e552f8f18ee3bdfcfb494563
+PKG_VERSION:=5.9.12-1
+PKG_RELEASE:=1
+PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v5.9.12/
+PKG_HASH:=8cf3f23152a787eeec2df1d7b38a559b0d89bdc823d9ac99175a4eb76d2b619e
 
 PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
 PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
index 020e2bbab51b88446b3785b937f1bd05a6de4948..646389a35314dfbcd8ecf7f1aa124f56680e6efd 100644 (file)
@@ -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)
  {
index 2b36a559d676bdcff8380bafee98f2b367c574c0..0abd66f85edfbd78b8c5b51a223e799f29a0249c 100644 (file)
@@ -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;
  
index db9a88e000e5b23aae3b035d973d3d2e88796df1..dbd3be79e1f5fbce3fc6add298f60806930fda8f 100644 (file)
@@ -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
index 9498e02462b02f9bf12af73648c6fdf3c9a17827..4c1963b828257da326608d5370246fed0f04df7e 100644 (file)
@@ -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;
index fbb6fad660a649859c7ce8ed299e197ea57bbf7a..ace2fd548155183ed3c366ef19a43e4fd943f234 100644 (file)
@@ -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;
index 1b965087d3e2d581fa7b69089716354c06a4ec26..c18a5bfa4af5f0c4727f9abbacb82a4ac2286072 100644 (file)
@@ -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;
index 91bf464ede55ce01e3202d997aa413b2736e476e..bf8343790d86fc6ef939e852d29ee0ce385da97f 100644 (file)
@@ -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
         */
index 2613171a86ec5471830b3ae5af1114bf2e74183f..9658bda1c17806856bcf2b8ac7053db2ba5a2f76 100644 (file)
@@ -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);
        }
  
index 7feca97e9fed687a02e7ee67e0c69343df1952b9..1c5255cce06a6d369de30bcf139f80e2d04ee170 100644 (file)
@@ -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,
        .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;
  
        /* 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;
  
index 68db4f72d37999358f0afd1ee8802164e8370f33..f80fda43605f53fad1e2cd66778a6bf233ea3d24 100644 (file)
@@ -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;
  }
  
index c00ab7c78644a5b1e30fe763530c637deb8f12b0..1958ddad7d603c8a7ca90bbf8d8f6da8c8e756c2 100644 (file)
@@ -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=
        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
        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
index da76b34fab3698ac013ec59cb40cf959edca71ea..b6934d39548bdf3d5e92e5cb0247b128ea65129b 100644 (file)
@@ -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 (file)
index b26a6bc..0000000
+++ /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 (file)
index ee7e634..0000000
+++ /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 (file)
index 9b266ff..0000000
+++ /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 (file)
index 486d10e..0000000
+++ /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 */
index a94f9d8fdb6e394edb2acc8d33ed0886b5afa8eb..3c699dc648e63491683b357cc1b9ebf3fcd36b13 100644 (file)
@@ -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;
 -}
index 2333ca2dad0e322f170248ccc93c8853ae939991..0033837ce7454232940bbf58f2956c874d479fb4 100644 (file)
@@ -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);
index fccb1ebffabff4fdac083064a2c3aa6edf960806..c7da15fffc5a65a1e0dd3c75a16683052fe377ad 100644 (file)
@@ -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 (file)
index cb70670..0000000
+++ /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;
-       }
index 10d8ad8d716ffc1e161a8f5281891887fa7c8d08..d09d70725e5516449ea281680cdb8c1dfdc68726 100644 (file)
@@ -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 (file)
index bee43a6..0000000
+++ /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 (file)
index 802d574..0000000
+++ /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 (file)
index 77ecc82..0000000
+++ /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 (file)
index 92b1362..0000000
+++ /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 (file)
index ee1db71..0000000
+++ /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 (file)
index 06db852..0000000
+++ /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 (file)
index a5df07e..0000000
+++ /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 (file)
index eb56a2c..0000000
+++ /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)
index e411d597224a5b39f7d4b66c86ae2452fb990e00..d121eec88ef3c1c67a1b8dd6de9fe7eb66f63779 100644 (file)
@@ -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));
  
index 6dce21db1e2f4bb714af389534c16106efa5c6c0..e8763e62377f5cf1b7efdb40466129f682bf0b42 100644 (file)
@@ -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);
index cb5a98631239413e4d3125d06bf3e28db04f0fb0..077a82d5ee68e770afc62b1b94781f25e397f006 100644 (file)
@@ -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;
  
index 7593c41da068a5476af97f3c198d60ef736dfd14..811c66499bbe0a8573efd43f35c2c99e5f3527ee 100644 (file)
@@ -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();
  
index e13723b160ecb50f95d317aaa8c29a0a00d34411..83522a7541863aba3bfd77d78482267e694f84b9 100644 (file)
@@ -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);
        }
  
index 168d6458a523bf00b105050bea1354461ae438b9..9bd1765b16763b27e353f592f8cbe12d7ce9df20 100644 (file)
@@ -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);
  
index f8287c53a7ac55b85a53de84e48b0f247f294835..48d76868634e5a6e0f0caacd1b00e47a128f914a 100644 (file)
@@ -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)) {
index 8505ce56f69063a0e32417dc2b7235a7ee89ec8e..d62621ca778b7380da124cb5c6dea5627fba7988 100644 (file)
@@ -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)) {
index 7bb54f499baeb191b9952cff54f961833b723dd5..62bb917184ffa769bb4a0aa3cdac9e2f57c9aba9 100644 (file)
@@ -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)
  {
index 5469a419bfef053b584f9fe3113b39594d11e179..ffb89a4d4aa4eba2084c8b72d60e3af4722f1061 100644 (file)
@@ -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);
        }
  
index e8b29bb4c54024fd87b4d2cfd70315e5248fe22d..b5dcb0b013f1c7d9e93dd1b5d4df4fd192776441 100644 (file)
@@ -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);
index aa166c6431a2406bf10c1f2bd3c045e11a62313e..f38afc791267348b8db0f8937c12af169852f3ef 100644 (file)
@@ -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)
  );
  
index a3d600152c2268cbb4928b71db69abda0f4fccf1..0bfb10cdb01453f790fa5d1b572a91066877eacd 100644 (file)
@@ -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 (file)
index 3d687f8..0000000
+++ /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 (file)
index e22a09e..0000000
+++ /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;
index cff8045c05861f31fc8be10208f2f4bd71c26857..93a9eca51f0e72703db50c7a17b921eebbe2015f 100644 (file)
@@ -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;
  
index cdbbcf5d065b19ffa38203048b74fd0a335dfd16..e518f5134ff005c53adc20c51e0f2118ee03eda2 100644 (file)
@@ -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 (file)
index e3a877f..0000000
+++ /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 (file)
index b1c339a..0000000
+++ /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);
index 378c37455d11f036deec5f87da90a01819da6e10..d3fb3875f6716919d28e59a31324a7905520f38a 100644 (file)
@@ -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;
index f450ca9ca93ed99808f67da7d04aca3280d32741..a8e6e899544932a33753d444be2b8ff71498d3f2 100644 (file)
@@ -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;
 +
index 7af13661a8717732fffee759c637a04a58436052..09f6fd22144458e4f0ac21c20a14fddb81fb9630 100644 (file)
@@ -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)
index 6abf3a126188c94204942f79f438cbf57747d3c1..683c9950d63c69d0bf4e75318e543efefb1599b1 100644 (file)
@@ -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 */