mac80211: sync mesh fast xmit patch with upstream requested changes

Signed-off-by: Felix Fietkau <nbd@nbd.name>
This commit is contained in:
Felix Fietkau 2023-02-28 11:05:48 +01:00
parent f57a0709e8
commit 6262d3eb06

View File

@ -90,7 +90,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
#include "driver-ops.h" #include "driver-ops.h"
static int mesh_allocated; static int mesh_allocated;
@@ -698,6 +699,102 @@ ieee80211_mesh_update_bss_params(struct @@ -698,6 +699,95 @@ ieee80211_mesh_update_bss_params(struct
__le32_to_cpu(he_oper->he_oper_params); __le32_to_cpu(he_oper->he_oper_params);
} }
@ -154,16 +154,9 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ tid_tx->last_tx = jiffies; + tid_tx->last_tx = jiffies;
+ } + }
+ +
+ /* If the skb is shared we need to obtain our own copy */ + skb = skb_share_check(skb, GFP_ATOMIC);
+ if (skb_shared(skb)) {
+ struct sk_buff *oskb = skb;
+
+ skb = skb_clone(skb, GFP_ATOMIC);
+ if (!skb) + if (!skb)
+ return false; + return true;
+
+ kfree_skb(oskb);
+ }
+ +
+ skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, sta, skb)); + skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, sta, skb));
+ +
@ -193,7 +186,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
/** /**
* ieee80211_fill_mesh_addresses - fill addresses of a locally originated mesh frame * ieee80211_fill_mesh_addresses - fill addresses of a locally originated mesh frame
* @hdr: 802.11 frame header * @hdr: 802.11 frame header
@@ -780,6 +877,8 @@ static void ieee80211_mesh_housekeeping( @@ -780,6 +870,8 @@ static void ieee80211_mesh_housekeeping(
changed = mesh_accept_plinks_update(sdata); changed = mesh_accept_plinks_update(sdata);
ieee80211_mbss_info_change_notify(sdata, changed); ieee80211_mbss_info_change_notify(sdata, changed);
@ -566,7 +559,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ if (!entry) + if (!entry)
+ goto unlock_sta; + goto unlock_sta;
+ +
+ spin_lock_bh(&cache->walk_lock); + spin_lock(&cache->walk_lock);
+ prev = rhashtable_lookup_get_insert_fast(&cache->rht, + prev = rhashtable_lookup_get_insert_fast(&cache->rht,
+ &entry->rhash, + &entry->rhash,
+ fast_tx_rht_params); + fast_tx_rht_params);
@ -589,7 +582,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
+ hlist_add_head(&entry->walk_list, &cache->walk_head); + hlist_add_head(&entry->walk_list, &cache->walk_head);
+ +
+unlock_cache: +unlock_cache:
+ spin_unlock_bh(&cache->walk_lock); + spin_unlock(&cache->walk_lock);
+unlock_sta: +unlock_sta:
+ spin_unlock_bh(&sta->lock); + spin_unlock_bh(&sta->lock);
+} +}
@ -801,16 +794,17 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
info = IEEE80211_SKB_CB(skb); info = IEEE80211_SKB_CB(skb);
memset(info, 0, sizeof(*info)); memset(info, 0, sizeof(*info));
@@ -3689,7 +3693,7 @@ static void __ieee80211_xmit_fast(struct @@ -3689,7 +3693,8 @@ static void __ieee80211_xmit_fast(struct
#endif #endif
if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) { if (hdr->frame_control & cpu_to_le16(IEEE80211_STYPE_QOS_DATA)) {
- tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; - tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
+ u8 tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK; + u8 tid = skb->priority & IEEE80211_QOS_CTL_TAG1D_MASK;
+
*ieee80211_get_qos_ctl(hdr) = tid; *ieee80211_get_qos_ctl(hdr) = tid;
} }
@@ -3732,6 +3736,7 @@ static bool ieee80211_xmit_fast(struct i @@ -3732,6 +3737,7 @@ static bool ieee80211_xmit_fast(struct i
struct ieee80211_hdr *hdr = (void *)fast_tx->hdr; struct ieee80211_hdr *hdr = (void *)fast_tx->hdr;
struct tid_ampdu_tx *tid_tx = NULL; struct tid_ampdu_tx *tid_tx = NULL;
struct sk_buff *next; struct sk_buff *next;
@ -818,7 +812,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
u8 tid = IEEE80211_NUM_TIDS; u8 tid = IEEE80211_NUM_TIDS;
/* control port protocol needs a lot of special handling */ /* control port protocol needs a lot of special handling */
@@ -3757,14 +3762,18 @@ static bool ieee80211_xmit_fast(struct i @@ -3757,14 +3763,18 @@ static bool ieee80211_xmit_fast(struct i
} }
} }
@ -838,7 +832,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
} }
return true; return true;
@@ -4244,8 +4253,15 @@ void __ieee80211_subif_start_xmit(struct @@ -4244,8 +4254,15 @@ void __ieee80211_subif_start_xmit(struct
return; return;
} }
@ -854,7 +848,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
if (ieee80211_lookup_ra_sta(sdata, skb, &sta)) if (ieee80211_lookup_ra_sta(sdata, skb, &sta))
goto out_free; goto out_free;
@@ -4255,8 +4271,6 @@ void __ieee80211_subif_start_xmit(struct @@ -4255,8 +4272,6 @@ void __ieee80211_subif_start_xmit(struct
skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, sta, skb)); skb_set_queue_mapping(skb, ieee80211_select_queue(sdata, sta, skb));
ieee80211_aggr_check(sdata, sta, skb); ieee80211_aggr_check(sdata, sta, skb);