mac80211: Update to version 5.2-rc7
[openwrt/openwrt.git] / package / kernel / mac80211 / patches / subsys / 357-mac80211-optimize-skb-resizing.patch
index 98b23422653d271122e42c191bb0fd36edff5282..6ed2884d5ef3aebb1dc3f2fd9dd5f5d8890d2b90 100644 (file)
@@ -24,22 +24,23 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 
 --- a/net/mac80211/ieee80211_i.h
 +++ b/net/mac80211/ieee80211_i.h
-@@ -1761,6 +1761,8 @@ void ieee80211_clear_fast_xmit(struct st
- int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev,
-                             const u8 *buf, size_t len,
+@@ -1780,6 +1780,9 @@ int ieee80211_tx_control_port(struct wip
                              const u8 *dest, __be16 proto, bool unencrypted);
-+int ieee80211_skb_resize(struct ieee80211_sub_if_data *sdata,
+ 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
-@@ -672,6 +672,11 @@ void ieee80211_tx_monitor(struct ieee802
+@@ -669,6 +669,11 @@ void ieee80211_tx_monitor(struct ieee802
                }
        }
  
-+      if (ieee80211_skb_resize(NULL, skb, 0, 0)) {
++      if (ieee80211_skb_resize(local, NULL, skb, 0, 0)) {
 +              dev_kfree_skb(skb);
 +              return;
 +      }
@@ -49,7 +50,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        if (WARN_ON_ONCE(skb_headroom(skb) < rtap_len)) {
 --- a/net/mac80211/tx.c
 +++ b/net/mac80211/tx.c
-@@ -1914,37 +1914,53 @@ static bool ieee80211_tx(struct ieee8021
+@@ -1935,37 +1935,53 @@ static bool ieee80211_tx(struct ieee8021
  }
  
  /* device xmit handlers */
@@ -57,10 +58,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 -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_sub_if_data *sdata,
++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_local *local = sdata->local;
 +      struct ieee80211_tx_info *info = IEEE80211_SKB_CB(skb);
        struct ieee80211_hdr *hdr;
 -      bool enc_tailroom;
@@ -121,7 +123,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
                wiphy_debug(local->hw.wiphy,
                            "failed to reallocate TX buffer\n");
                return -ENOMEM;
-@@ -1960,18 +1976,8 @@ void ieee80211_xmit(struct ieee80211_sub
+@@ -1981,18 +1997,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;
@@ -137,11 +139,11 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 -      headroom = max_t(int, 0, headroom);
 -
 -      if (ieee80211_skb_resize(sdata, skb, headroom, may_encrypt)) {
-+      if (ieee80211_skb_resize(sdata, skb, 0, 0)) {
++      if (ieee80211_skb_resize(local, sdata, skb, 0, 0)) {
                ieee80211_free_txskb(&local->hw, skb);
                return;
        }
-@@ -2740,30 +2746,14 @@ static struct sk_buff *ieee80211_build_h
+@@ -2774,30 +2780,14 @@ static struct sk_buff *ieee80211_build_h
  
        skb_pull(skb, skip_header_bytes);
        padsize = ieee80211_hdr_padsize(&local->hw, hdrlen);
@@ -170,7 +172,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 -                      skb = NULL;
 -                      return ERR_PTR(-ENOMEM);
 -              }
-+      if (ieee80211_skb_resize(sdata, skb, head_need,
++      if (ieee80211_skb_resize(local, sdata, skb, head_need,
 +                               sdata->encrypt_headroom)) {
 +              ieee80211_free_txskb(&local->hw, skb);
 +              skb = NULL;
@@ -178,7 +180,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        }
  
        if (encaps_data)
-@@ -3377,7 +3367,6 @@ static bool ieee80211_xmit_fast(struct i
+@@ -3417,7 +3407,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);
@@ -186,7 +188,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
        struct ethhdr eth;
        struct ieee80211_tx_info *info;
        struct ieee80211_hdr *hdr = (void *)fast_tx->hdr;
-@@ -3429,10 +3418,7 @@ static bool ieee80211_xmit_fast(struct i
+@@ -3469,10 +3458,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'
         */
@@ -194,7 +196,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
 -                                        max_t(int, extra_head + hw_headroom -
 -                                                   skb_headroom(skb), 0),
 -                                        false))) {
-+      if (unlikely(ieee80211_skb_resize(sdata, skb, extra_head, 0))) {
++      if (unlikely(ieee80211_skb_resize(local, sdata, skb, extra_head, 0))) {
                kfree_skb(skb);
                return true;
        }