mirror of https://github.com/hak5/openwrt.git
mac80211: Update to version 4.19.120
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>openwrt-19.07
parent
96d280cc37
commit
607809dcdc
|
@ -10,10 +10,10 @@ include $(INCLUDE_DIR)/kernel.mk
|
||||||
|
|
||||||
PKG_NAME:=mac80211
|
PKG_NAME:=mac80211
|
||||||
|
|
||||||
PKG_VERSION:=4.19.112-1
|
PKG_VERSION:=4.19.120-1
|
||||||
PKG_RELEASE:=2
|
PKG_RELEASE:=1
|
||||||
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19.112/
|
PKG_SOURCE_URL:=@KERNEL/linux/kernel/projects/backports/stable/v4.19.120/
|
||||||
PKG_HASH:=e60a7aec902638c538b150d0d6165d866eb804845b97d7770acd653fd6a6b718
|
PKG_HASH:=2bafd75da301a30a5f2b98f433b6545d7b58c1fc3af15e9e9aa085df7f9db1d4
|
||||||
|
|
||||||
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
|
PKG_SOURCE:=backports-$(PKG_VERSION).tar.xz
|
||||||
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
|
PKG_BUILD_DIR:=$(KERNEL_BUILD_DIR)/backports-$(PKG_VERSION)
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -3800,6 +3800,12 @@ out:
|
@@ -3822,6 +3822,12 @@ out:
|
||||||
netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
|
netdev_tx_t ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||||
struct net_device *dev)
|
struct net_device *dev)
|
||||||
{
|
{
|
||||||
|
|
|
@ -77,7 +77,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
|
||||||
atomic_t agg_queue_stop[IEEE80211_MAX_QUEUES];
|
atomic_t agg_queue_stop[IEEE80211_MAX_QUEUES];
|
||||||
|
|
||||||
@@ -2046,6 +2048,7 @@ void ieee80211_txq_remove_vlan(struct ie
|
@@ -2047,6 +2049,7 @@ void ieee80211_txq_remove_vlan(struct ie
|
||||||
struct ieee80211_sub_if_data *sdata);
|
struct ieee80211_sub_if_data *sdata);
|
||||||
void ieee80211_fill_txq_stats(struct cfg80211_txq_stats *txqstats,
|
void ieee80211_fill_txq_stats(struct cfg80211_txq_stats *txqstats,
|
||||||
struct txq_info *txqi);
|
struct txq_info *txqi);
|
||||||
|
@ -100,7 +100,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
(unsigned long) local);
|
(unsigned long) local);
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -3485,13 +3485,19 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
@@ -3487,13 +3487,19 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
||||||
struct ieee80211_tx_info *info;
|
struct ieee80211_tx_info *info;
|
||||||
struct ieee80211_tx_data tx;
|
struct ieee80211_tx_data tx;
|
||||||
ieee80211_tx_result r;
|
ieee80211_tx_result r;
|
||||||
|
@ -122,7 +122,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
/* Make sure fragments stay together. */
|
/* Make sure fragments stay together. */
|
||||||
skb = __skb_dequeue(&txqi->frags);
|
skb = __skb_dequeue(&txqi->frags);
|
||||||
if (skb)
|
if (skb)
|
||||||
@@ -3586,6 +3592,7 @@ begin:
|
@@ -3606,6 +3612,7 @@ begin:
|
||||||
}
|
}
|
||||||
|
|
||||||
IEEE80211_SKB_CB(skb)->control.vif = vif;
|
IEEE80211_SKB_CB(skb)->control.vif = vif;
|
||||||
|
|
|
@ -12,7 +12,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
|
||||||
--- a/net/mac80211/status.c
|
--- a/net/mac80211/status.c
|
||||||
+++ b/net/mac80211/status.c
|
+++ b/net/mac80211/status.c
|
||||||
@@ -881,6 +881,7 @@ static void __ieee80211_tx_status(struct
|
@@ -719,6 +719,7 @@ static void __ieee80211_tx_status(struct
|
||||||
int rates_idx;
|
int rates_idx;
|
||||||
bool send_to_cooked;
|
bool send_to_cooked;
|
||||||
bool acked;
|
bool acked;
|
||||||
|
@ -20,7 +20,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
struct ieee80211_bar *bar;
|
struct ieee80211_bar *bar;
|
||||||
int shift = 0;
|
int shift = 0;
|
||||||
int tid = IEEE80211_NUM_TIDS;
|
int tid = IEEE80211_NUM_TIDS;
|
||||||
@@ -898,6 +899,8 @@ static void __ieee80211_tx_status(struct
|
@@ -736,6 +737,8 @@ static void __ieee80211_tx_status(struct
|
||||||
clear_sta_flag(sta, WLAN_STA_SP);
|
clear_sta_flag(sta, WLAN_STA_SP);
|
||||||
|
|
||||||
acked = !!(info->flags & IEEE80211_TX_STAT_ACK);
|
acked = !!(info->flags & IEEE80211_TX_STAT_ACK);
|
||||||
|
@ -29,7 +29,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
|
||||||
/* mesh Peer Service Period support */
|
/* mesh Peer Service Period support */
|
||||||
if (ieee80211_vif_is_mesh(&sta->sdata->vif) &&
|
if (ieee80211_vif_is_mesh(&sta->sdata->vif) &&
|
||||||
@@ -962,12 +965,12 @@ static void __ieee80211_tx_status(struct
|
@@ -800,12 +803,12 @@ static void __ieee80211_tx_status(struct
|
||||||
ieee80211_handle_filtered_frame(local, sta, skb);
|
ieee80211_handle_filtered_frame(local, sta, skb);
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
|
@ -44,8 +44,8 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
sta->status_stats.msdu_failed[tid]++;
|
sta->status_stats.msdu_failed[tid]++;
|
||||||
|
|
||||||
sta->status_stats.msdu_retries[tid] +=
|
sta->status_stats.msdu_retries[tid] +=
|
||||||
@@ -994,7 +997,7 @@ static void __ieee80211_tx_status(struct
|
@@ -826,7 +829,7 @@ static void __ieee80211_tx_status(struct
|
||||||
info->status.tx_time, 0);
|
acked, info->status.tx_time);
|
||||||
|
|
||||||
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
|
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
|
||||||
- if (info->flags & IEEE80211_TX_STAT_ACK) {
|
- if (info->flags & IEEE80211_TX_STAT_ACK) {
|
||||||
|
@ -53,7 +53,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
if (sta->status_stats.lost_packets)
|
if (sta->status_stats.lost_packets)
|
||||||
sta->status_stats.lost_packets = 0;
|
sta->status_stats.lost_packets = 0;
|
||||||
|
|
||||||
@@ -1002,6 +1005,8 @@ static void __ieee80211_tx_status(struct
|
@@ -834,6 +837,8 @@ static void __ieee80211_tx_status(struct
|
||||||
if (test_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH))
|
if (test_sta_flag(sta, WLAN_STA_TDLS_PEER_AUTH))
|
||||||
sta->status_stats.last_tdls_pkt_time =
|
sta->status_stats.last_tdls_pkt_time =
|
||||||
jiffies;
|
jiffies;
|
||||||
|
@ -62,7 +62,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
} else {
|
} else {
|
||||||
ieee80211_lost_packet(sta, info);
|
ieee80211_lost_packet(sta, info);
|
||||||
}
|
}
|
||||||
@@ -1127,7 +1132,7 @@ void ieee80211_tx_status_ext(struct ieee
|
@@ -959,7 +964,7 @@ void ieee80211_tx_status_ext(struct ieee
|
||||||
|
|
||||||
sta = container_of(pubsta, struct sta_info, sta);
|
sta = container_of(pubsta, struct sta_info, sta);
|
||||||
|
|
||||||
|
@ -71,7 +71,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
sta->status_stats.retry_failed++;
|
sta->status_stats.retry_failed++;
|
||||||
sta->status_stats.retry_count += retry_count;
|
sta->status_stats.retry_count += retry_count;
|
||||||
|
|
||||||
@@ -1142,6 +1147,8 @@ void ieee80211_tx_status_ext(struct ieee
|
@@ -974,6 +979,8 @@ void ieee80211_tx_status_ext(struct ieee
|
||||||
sta->status_stats.last_tdls_pkt_time = jiffies;
|
sta->status_stats.last_tdls_pkt_time = jiffies;
|
||||||
} else if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
|
} else if (test_sta_flag(sta, WLAN_STA_PS_STA)) {
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -191,7 +191,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
|
||||||
--- a/net/mac80211/sta_info.c
|
--- a/net/mac80211/sta_info.c
|
||||||
+++ b/net/mac80211/sta_info.c
|
+++ b/net/mac80211/sta_info.c
|
||||||
@@ -1244,7 +1244,7 @@ void ieee80211_sta_ps_deliver_wakeup(str
|
@@ -1249,7 +1249,7 @@ void ieee80211_sta_ps_deliver_wakeup(str
|
||||||
if (!txq_has_queue(sta->sta.txq[i]))
|
if (!txq_has_queue(sta->sta.txq[i]))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -229,7 +229,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@@ -3600,6 +3604,60 @@ out:
|
@@ -3620,6 +3624,60 @@ out:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ieee80211_tx_dequeue);
|
EXPORT_SYMBOL(ieee80211_tx_dequeue);
|
||||||
|
|
||||||
|
@ -289,4 +289,4 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
+
|
+
|
||||||
void __ieee80211_subif_start_xmit(struct sk_buff *skb,
|
void __ieee80211_subif_start_xmit(struct sk_buff *skb,
|
||||||
struct net_device *dev,
|
struct net_device *dev,
|
||||||
u32 info_flags)
|
u32 info_flags,
|
||||||
|
|
|
@ -302,7 +302,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < IEEE80211_NUM_TIDS; i++)
|
for (i = 0; i < IEEE80211_NUM_TIDS; i++)
|
||||||
@@ -1821,6 +1821,27 @@ void ieee80211_sta_set_buffered(struct i
|
@@ -1826,6 +1826,27 @@ void ieee80211_sta_set_buffered(struct i
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ieee80211_sta_set_buffered);
|
EXPORT_SYMBOL(ieee80211_sta_set_buffered);
|
||||||
|
|
||||||
|
@ -330,7 +330,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
int sta_info_move_state(struct sta_info *sta,
|
int sta_info_move_state(struct sta_info *sta,
|
||||||
enum ieee80211_sta_state new_state)
|
enum ieee80211_sta_state new_state)
|
||||||
{
|
{
|
||||||
@@ -2187,6 +2208,23 @@ void sta_set_sinfo(struct sta_info *sta,
|
@@ -2192,6 +2213,23 @@ void sta_set_sinfo(struct sta_info *sta,
|
||||||
sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
|
sinfo->filled |= BIT_ULL(NL80211_STA_INFO_TX_FAILED);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -385,7 +385,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
*/
|
*/
|
||||||
--- a/net/mac80211/status.c
|
--- a/net/mac80211/status.c
|
||||||
+++ b/net/mac80211/status.c
|
+++ b/net/mac80211/status.c
|
||||||
@@ -825,6 +825,12 @@ static void __ieee80211_tx_status(struct
|
@@ -828,6 +828,12 @@ static void __ieee80211_tx_status(struct
|
||||||
ieee80211_sta_tx_notify(sta->sdata, (void *) skb->data,
|
ieee80211_sta_tx_notify(sta->sdata, (void *) skb->data,
|
||||||
acked, info->status.tx_time);
|
acked, info->status.tx_time);
|
||||||
|
|
||||||
|
@ -396,7 +396,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
+ info->status.tx_time, 0);
|
+ info->status.tx_time, 0);
|
||||||
+
|
+
|
||||||
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
|
if (ieee80211_hw_check(&local->hw, REPORTS_TX_ACK_STATUS)) {
|
||||||
if (info->flags & IEEE80211_TX_STAT_ACK) {
|
if (acked) {
|
||||||
if (sta->status_stats.lost_packets)
|
if (sta->status_stats.lost_packets)
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
|
@ -412,7 +412,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
spin_lock_bh(&local->active_txq_lock[txqi->txq.ac]);
|
spin_lock_bh(&local->active_txq_lock[txqi->txq.ac]);
|
||||||
list_del_init(&txqi->schedule_order);
|
list_del_init(&txqi->schedule_order);
|
||||||
spin_unlock_bh(&local->active_txq_lock[txqi->txq.ac]);
|
spin_unlock_bh(&local->active_txq_lock[txqi->txq.ac]);
|
||||||
@@ -3611,11 +3614,28 @@ struct ieee80211_txq *ieee80211_next_txq
|
@@ -3631,11 +3634,28 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||||
|
|
||||||
lockdep_assert_held(&local->active_txq_lock[ac]);
|
lockdep_assert_held(&local->active_txq_lock[ac]);
|
||||||
|
|
||||||
|
@ -442,7 +442,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
list_del_init(&txqi->schedule_order);
|
list_del_init(&txqi->schedule_order);
|
||||||
@@ -3633,12 +3653,74 @@ void ieee80211_return_txq(struct ieee802
|
@@ -3653,12 +3673,74 @@ void ieee80211_return_txq(struct ieee802
|
||||||
lockdep_assert_held(&local->active_txq_lock[txq->ac]);
|
lockdep_assert_held(&local->active_txq_lock[txq->ac]);
|
||||||
|
|
||||||
if (list_empty(&txqi->schedule_order) &&
|
if (list_empty(&txqi->schedule_order) &&
|
||||||
|
|
|
@ -51,7 +51,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
|
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -3673,6 +3673,19 @@ void ieee80211_return_txq(struct ieee802
|
@@ -3693,6 +3693,19 @@ void ieee80211_return_txq(struct ieee802
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ieee80211_return_txq);
|
EXPORT_SYMBOL(ieee80211_return_txq);
|
||||||
|
|
||||||
|
|
|
@ -48,15 +48,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
if (likely(sta)) {
|
if (likely(sta)) {
|
||||||
if (!IS_ERR(sta))
|
if (!IS_ERR(sta))
|
||||||
tx->sta = sta;
|
tx->sta = sta;
|
||||||
@@ -3523,6 +3523,7 @@ begin:
|
@@ -3525,6 +3525,7 @@ begin:
|
||||||
tx.local = local;
|
tx.local = local;
|
||||||
tx.skb = skb;
|
tx.skb = skb;
|
||||||
tx.sdata = vif_to_sdata(info->control.vif);
|
tx.sdata = vif_to_sdata(info->control.vif);
|
||||||
+ tx.hdrlen = ieee80211_hdrlen(hdr->frame_control);
|
+ tx.hdrlen = ieee80211_hdrlen(hdr->frame_control);
|
||||||
|
|
||||||
if (txq->sta)
|
if (txq->sta) {
|
||||||
tx.sta = container_of(txq->sta, struct sta_info, sta);
|
tx.sta = container_of(txq->sta, struct sta_info, sta);
|
||||||
@@ -3549,7 +3550,7 @@ begin:
|
@@ -3569,7 +3570,7 @@ begin:
|
||||||
|
|
||||||
if (tx.key &&
|
if (tx.key &&
|
||||||
(tx.key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV))
|
(tx.key->conf.flags & IEEE80211_KEY_FLAG_GENERATE_IV))
|
||||||
|
@ -65,7 +65,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
ieee80211_xmit_fast_finish(sta->sdata, sta, pn_offs,
|
ieee80211_xmit_fast_finish(sta->sdata, sta, pn_offs,
|
||||||
tx.key, skb);
|
tx.key, skb);
|
||||||
@@ -4006,6 +4007,7 @@ ieee80211_build_data_template(struct iee
|
@@ -4028,6 +4029,7 @@ ieee80211_build_data_template(struct iee
|
||||||
hdr = (void *)skb->data;
|
hdr = (void *)skb->data;
|
||||||
tx.sta = sta_info_get(sdata, hdr->addr1);
|
tx.sta = sta_info_get(sdata, hdr->addr1);
|
||||||
tx.skb = skb;
|
tx.skb = skb;
|
||||||
|
|
|
@ -236,7 +236,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
if (skb->len < len_rthdr + hdrlen)
|
if (skb->len < len_rthdr + hdrlen)
|
||||||
goto fail;
|
goto fail;
|
||||||
@@ -2440,7 +2439,7 @@ static struct sk_buff *ieee80211_build_h
|
@@ -2441,7 +2440,7 @@ static struct sk_buff *ieee80211_build_h
|
||||||
struct ieee80211_chanctx_conf *chanctx_conf;
|
struct ieee80211_chanctx_conf *chanctx_conf;
|
||||||
struct ieee80211_sub_if_data *ap_sdata;
|
struct ieee80211_sub_if_data *ap_sdata;
|
||||||
enum nl80211_band band;
|
enum nl80211_band band;
|
||||||
|
@ -245,7 +245,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
if (IS_ERR(sta))
|
if (IS_ERR(sta))
|
||||||
sta = NULL;
|
sta = NULL;
|
||||||
@@ -2739,7 +2738,9 @@ static struct sk_buff *ieee80211_build_h
|
@@ -2740,7 +2739,9 @@ static struct sk_buff *ieee80211_build_h
|
||||||
}
|
}
|
||||||
|
|
||||||
skb_pull(skb, skip_header_bytes);
|
skb_pull(skb, skip_header_bytes);
|
||||||
|
@ -255,7 +255,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* So we need to modify the skb header and hence need a copy of
|
* So we need to modify the skb header and hence need a copy of
|
||||||
@@ -2772,6 +2773,9 @@ static struct sk_buff *ieee80211_build_h
|
@@ -2773,6 +2774,9 @@ static struct sk_buff *ieee80211_build_h
|
||||||
memcpy(skb_push(skb, meshhdrlen), &mesh_hdr, meshhdrlen);
|
memcpy(skb_push(skb, meshhdrlen), &mesh_hdr, meshhdrlen);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -265,7 +265,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
if (ieee80211_is_data_qos(fc)) {
|
if (ieee80211_is_data_qos(fc)) {
|
||||||
__le16 *qos_control;
|
__le16 *qos_control;
|
||||||
|
|
||||||
@@ -2947,6 +2951,8 @@ void ieee80211_check_fast_xmit(struct st
|
@@ -2949,6 +2953,8 @@ void ieee80211_check_fast_xmit(struct st
|
||||||
fc |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
|
fc |= cpu_to_le16(IEEE80211_STYPE_QOS_DATA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,16 +274,16 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
/* We store the key here so there's no point in using rcu_dereference()
|
/* We store the key here so there's no point in using rcu_dereference()
|
||||||
* but that's fine because the code that changes the pointers will call
|
* but that's fine because the code that changes the pointers will call
|
||||||
* this function after doing so. For a single CPU that would be enough,
|
* this function after doing so. For a single CPU that would be enough,
|
||||||
@@ -3523,7 +3529,7 @@ begin:
|
@@ -3525,7 +3531,7 @@ begin:
|
||||||
tx.local = local;
|
tx.local = local;
|
||||||
tx.skb = skb;
|
tx.skb = skb;
|
||||||
tx.sdata = vif_to_sdata(info->control.vif);
|
tx.sdata = vif_to_sdata(info->control.vif);
|
||||||
- tx.hdrlen = ieee80211_hdrlen(hdr->frame_control);
|
- tx.hdrlen = ieee80211_hdrlen(hdr->frame_control);
|
||||||
+ tx.hdrlen = ieee80211_padded_hdrlen(hw, hdr->frame_control);
|
+ tx.hdrlen = ieee80211_padded_hdrlen(hw, hdr->frame_control);
|
||||||
|
|
||||||
if (txq->sta)
|
if (txq->sta) {
|
||||||
tx.sta = container_of(txq->sta, struct sta_info, sta);
|
tx.sta = container_of(txq->sta, struct sta_info, sta);
|
||||||
@@ -4007,7 +4013,7 @@ ieee80211_build_data_template(struct iee
|
@@ -4029,7 +4035,7 @@ ieee80211_build_data_template(struct iee
|
||||||
hdr = (void *)skb->data;
|
hdr = (void *)skb->data;
|
||||||
tx.sta = sta_info_get(sdata, hdr->addr1);
|
tx.sta = sta_info_get(sdata, hdr->addr1);
|
||||||
tx.skb = skb;
|
tx.skb = skb;
|
||||||
|
|
|
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
* ieee80211_txq_may_transmit - check whether TXQ is allowed to transmit
|
* ieee80211_txq_may_transmit - check whether TXQ is allowed to transmit
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -3617,16 +3617,17 @@ EXPORT_SYMBOL(ieee80211_tx_dequeue);
|
@@ -3637,16 +3637,17 @@ EXPORT_SYMBOL(ieee80211_tx_dequeue);
|
||||||
struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac)
|
struct ieee80211_txq *ieee80211_next_txq(struct ieee80211_hw *hw, u8 ac)
|
||||||
{
|
{
|
||||||
struct ieee80211_local *local = hw_to_local(hw);
|
struct ieee80211_local *local = hw_to_local(hw);
|
||||||
|
@ -115,7 +115,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
if (txqi->txq.sta) {
|
if (txqi->txq.sta) {
|
||||||
struct sta_info *sta = container_of(txqi->txq.sta,
|
struct sta_info *sta = container_of(txqi->txq.sta,
|
||||||
@@ -3643,21 +3644,25 @@ struct ieee80211_txq *ieee80211_next_txq
|
@@ -3663,21 +3664,25 @@ struct ieee80211_txq *ieee80211_next_txq
|
||||||
|
|
||||||
|
|
||||||
if (txqi->schedule_round == local->schedule_round[ac])
|
if (txqi->schedule_round == local->schedule_round[ac])
|
||||||
|
@ -146,7 +146,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
if (list_empty(&txqi->schedule_order) &&
|
if (list_empty(&txqi->schedule_order) &&
|
||||||
(!skb_queue_empty(&txqi->frags) || txqi->tin.backlog_packets)) {
|
(!skb_queue_empty(&txqi->frags) || txqi->tin.backlog_packets)) {
|
||||||
@@ -3677,18 +3682,7 @@ void ieee80211_return_txq(struct ieee802
|
@@ -3697,18 +3702,7 @@ void ieee80211_return_txq(struct ieee802
|
||||||
list_add_tail(&txqi->schedule_order,
|
list_add_tail(&txqi->schedule_order,
|
||||||
&local->active_txqs[txq->ac]);
|
&local->active_txqs[txq->ac]);
|
||||||
}
|
}
|
||||||
|
@ -165,7 +165,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
spin_unlock_bh(&local->active_txq_lock[txq->ac]);
|
spin_unlock_bh(&local->active_txq_lock[txq->ac]);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ieee80211_schedule_txq);
|
EXPORT_SYMBOL(ieee80211_schedule_txq);
|
||||||
@@ -3701,7 +3695,7 @@ bool ieee80211_txq_may_transmit(struct i
|
@@ -3721,7 +3715,7 @@ bool ieee80211_txq_may_transmit(struct i
|
||||||
struct sta_info *sta;
|
struct sta_info *sta;
|
||||||
u8 ac = txq->ac;
|
u8 ac = txq->ac;
|
||||||
|
|
||||||
|
@ -174,7 +174,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
if (!txqi->txq.sta)
|
if (!txqi->txq.sta)
|
||||||
goto out;
|
goto out;
|
||||||
@@ -3731,34 +3725,27 @@ bool ieee80211_txq_may_transmit(struct i
|
@@ -3751,34 +3745,27 @@ bool ieee80211_txq_may_transmit(struct i
|
||||||
|
|
||||||
sta->airtime[ac].deficit += sta->airtime_weight;
|
sta->airtime[ac].deficit += sta->airtime_weight;
|
||||||
list_move_tail(&txqi->schedule_order, &local->active_txqs[ac]);
|
list_move_tail(&txqi->schedule_order, &local->active_txqs[ac]);
|
||||||
|
|
|
@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1146,13 +1142,10 @@ int mesh_nexthop_resolve(struct ieee8021
|
@@ -1147,13 +1143,10 @@ int mesh_nexthop_resolve(struct ieee8021
|
||||||
info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
||||||
ieee80211_set_qos_hdr(sdata, skb);
|
ieee80211_set_qos_hdr(sdata, skb);
|
||||||
skb_queue_tail(&mpath->frame_queue, skb);
|
skb_queue_tail(&mpath->frame_queue, skb);
|
||||||
|
@ -53,7 +53,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1172,13 +1165,10 @@ int mesh_nexthop_lookup(struct ieee80211
|
@@ -1173,13 +1166,10 @@ int mesh_nexthop_lookup(struct ieee80211
|
||||||
struct sta_info *next_hop;
|
struct sta_info *next_hop;
|
||||||
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
|
struct ieee80211_hdr *hdr = (struct ieee80211_hdr *) skb->data;
|
||||||
u8 *target_addr = hdr->addr3;
|
u8 *target_addr = hdr->addr3;
|
||||||
|
@ -68,7 +68,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
if (time_after(jiffies,
|
if (time_after(jiffies,
|
||||||
mpath->exp_time -
|
mpath->exp_time -
|
||||||
@@ -1193,12 +1183,10 @@ int mesh_nexthop_lookup(struct ieee80211
|
@@ -1194,12 +1184,10 @@ int mesh_nexthop_lookup(struct ieee80211
|
||||||
memcpy(hdr->addr1, next_hop->sta.addr, ETH_ALEN);
|
memcpy(hdr->addr1, next_hop->sta.addr, ETH_ALEN);
|
||||||
memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN);
|
memcpy(hdr->addr2, sdata->vif.addr, ETH_ALEN);
|
||||||
ieee80211_mps_set_frame_flags(sdata, next_hop, hdr);
|
ieee80211_mps_set_frame_flags(sdata, next_hop, hdr);
|
||||||
|
|
|
@ -111,7 +111,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
schedule_and_wake_txq(local, txqi);
|
schedule_and_wake_txq(local, txqi);
|
||||||
|
|
||||||
@@ -3198,6 +3199,7 @@ static bool ieee80211_amsdu_aggregate(st
|
@@ -3200,6 +3201,7 @@ static bool ieee80211_amsdu_aggregate(st
|
||||||
u8 max_subframes = sta->sta.max_amsdu_subframes;
|
u8 max_subframes = sta->sta.max_amsdu_subframes;
|
||||||
int max_frags = local->hw.max_tx_fragments;
|
int max_frags = local->hw.max_tx_fragments;
|
||||||
int max_amsdu_len = sta->sta.max_amsdu_len;
|
int max_amsdu_len = sta->sta.max_amsdu_len;
|
||||||
|
@ -119,7 +119,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
int orig_truesize;
|
int orig_truesize;
|
||||||
__be16 len;
|
__be16 len;
|
||||||
void *data;
|
void *data;
|
||||||
@@ -3220,6 +3222,8 @@ static bool ieee80211_amsdu_aggregate(st
|
@@ -3222,6 +3224,8 @@ static bool ieee80211_amsdu_aggregate(st
|
||||||
max_amsdu_len = min_t(int, max_amsdu_len,
|
max_amsdu_len = min_t(int, max_amsdu_len,
|
||||||
sta->sta.max_rc_amsdu_len);
|
sta->sta.max_rc_amsdu_len);
|
||||||
|
|
||||||
|
@ -128,7 +128,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
spin_lock_bh(&fq->lock);
|
spin_lock_bh(&fq->lock);
|
||||||
|
|
||||||
/* TODO: Ideally aggregation should be done on dequeue to remain
|
/* TODO: Ideally aggregation should be done on dequeue to remain
|
||||||
@@ -3227,7 +3231,8 @@ static bool ieee80211_amsdu_aggregate(st
|
@@ -3229,7 +3233,8 @@ static bool ieee80211_amsdu_aggregate(st
|
||||||
*/
|
*/
|
||||||
|
|
||||||
tin = &txqi->tin;
|
tin = &txqi->tin;
|
||||||
|
|
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -3505,6 +3505,7 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
@@ -3507,6 +3507,7 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
||||||
ieee80211_tx_result r;
|
ieee80211_tx_result r;
|
||||||
struct ieee80211_vif *vif = txq->vif;
|
struct ieee80211_vif *vif = txq->vif;
|
||||||
|
|
||||||
|
@ -18,7 +18,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
spin_lock_bh(&fq->lock);
|
spin_lock_bh(&fq->lock);
|
||||||
|
|
||||||
if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags) ||
|
if (test_bit(IEEE80211_TXQ_STOP, &txqi->flags) ||
|
||||||
@@ -3521,11 +3522,12 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
@@ -3523,11 +3524,12 @@ struct sk_buff *ieee80211_tx_dequeue(str
|
||||||
if (skb)
|
if (skb)
|
||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
|
@ -32,7 +32,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
hdr = (struct ieee80211_hdr *)skb->data;
|
hdr = (struct ieee80211_hdr *)skb->data;
|
||||||
info = IEEE80211_SKB_CB(skb);
|
info = IEEE80211_SKB_CB(skb);
|
||||||
|
|
||||||
@@ -3571,8 +3573,11 @@ begin:
|
@@ -3591,8 +3593,11 @@ begin:
|
||||||
|
|
||||||
skb = __skb_dequeue(&tx.skbs);
|
skb = __skb_dequeue(&tx.skbs);
|
||||||
|
|
||||||
|
@ -45,7 +45,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
}
|
}
|
||||||
|
|
||||||
if (skb && skb_has_frag_list(skb) &&
|
if (skb && skb_has_frag_list(skb) &&
|
||||||
@@ -3611,6 +3616,7 @@ begin:
|
@@ -3631,6 +3636,7 @@ begin:
|
||||||
}
|
}
|
||||||
|
|
||||||
IEEE80211_SKB_CB(skb)->control.vif = vif;
|
IEEE80211_SKB_CB(skb)->control.vif = vif;
|
||||||
|
|
|
@ -24,7 +24,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/net/mac80211/ieee80211_i.h
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
@@ -1761,6 +1761,9 @@ void ieee80211_clear_fast_xmit(struct st
|
@@ -1762,6 +1762,9 @@ void ieee80211_clear_fast_xmit(struct st
|
||||||
int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev,
|
int ieee80211_tx_control_port(struct wiphy *wiphy, struct net_device *dev,
|
||||||
const u8 *buf, size_t len,
|
const u8 *buf, size_t len,
|
||||||
const u8 *dest, __be16 proto, bool unencrypted);
|
const u8 *dest, __be16 proto, bool unencrypted);
|
||||||
|
@ -143,7 +143,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
ieee80211_free_txskb(&local->hw, skb);
|
ieee80211_free_txskb(&local->hw, skb);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -2740,30 +2746,14 @@ static struct sk_buff *ieee80211_build_h
|
@@ -2741,30 +2747,14 @@ static struct sk_buff *ieee80211_build_h
|
||||||
|
|
||||||
skb_pull(skb, skip_header_bytes);
|
skb_pull(skb, skip_header_bytes);
|
||||||
padsize = ieee80211_hdr_padsize(&local->hw, hdrlen);
|
padsize = ieee80211_hdr_padsize(&local->hw, hdrlen);
|
||||||
|
@ -180,7 +180,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
}
|
}
|
||||||
|
|
||||||
if (encaps_data)
|
if (encaps_data)
|
||||||
@@ -3375,7 +3365,6 @@ static bool ieee80211_xmit_fast(struct i
|
@@ -3377,7 +3367,6 @@ static bool ieee80211_xmit_fast(struct i
|
||||||
struct ieee80211_local *local = sdata->local;
|
struct ieee80211_local *local = sdata->local;
|
||||||
u16 ethertype = (skb->data[12] << 8) | skb->data[13];
|
u16 ethertype = (skb->data[12] << 8) | skb->data[13];
|
||||||
int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2);
|
int extra_head = fast_tx->hdr_len - (ETH_HLEN - 2);
|
||||||
|
@ -188,7 +188,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
struct ethhdr eth;
|
struct ethhdr eth;
|
||||||
struct ieee80211_tx_info *info;
|
struct ieee80211_tx_info *info;
|
||||||
struct ieee80211_hdr *hdr = (void *)fast_tx->hdr;
|
struct ieee80211_hdr *hdr = (void *)fast_tx->hdr;
|
||||||
@@ -3427,10 +3416,7 @@ static bool ieee80211_xmit_fast(struct i
|
@@ -3429,10 +3418,7 @@ static bool ieee80211_xmit_fast(struct i
|
||||||
* as the may-encrypt argument for the resize to not account for
|
* as the may-encrypt argument for the resize to not account for
|
||||||
* more room than we already have in 'extra_head'
|
* more room than we already have in 'extra_head'
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -72,7 +72,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
/**
|
/**
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -3653,8 +3653,9 @@ out:
|
@@ -3673,8 +3673,9 @@ out:
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(ieee80211_next_txq);
|
EXPORT_SYMBOL(ieee80211_next_txq);
|
||||||
|
|
||||||
|
@ -84,7 +84,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
{
|
{
|
||||||
struct ieee80211_local *local = hw_to_local(hw);
|
struct ieee80211_local *local = hw_to_local(hw);
|
||||||
struct txq_info *txqi = to_txq_info(txq);
|
struct txq_info *txqi = to_txq_info(txq);
|
||||||
@@ -3662,7 +3663,8 @@ void ieee80211_schedule_txq(struct ieee8
|
@@ -3682,7 +3683,8 @@ void ieee80211_schedule_txq(struct ieee8
|
||||||
spin_lock_bh(&local->active_txq_lock[txq->ac]);
|
spin_lock_bh(&local->active_txq_lock[txq->ac]);
|
||||||
|
|
||||||
if (list_empty(&txqi->schedule_order) &&
|
if (list_empty(&txqi->schedule_order) &&
|
||||||
|
@ -94,7 +94,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
/* If airtime accounting is active, always enqueue STAs at the
|
/* If airtime accounting is active, always enqueue STAs at the
|
||||||
* head of the list to ensure that they only get moved to the
|
* head of the list to ensure that they only get moved to the
|
||||||
* back by the airtime DRR scheduler once they have a negative
|
* back by the airtime DRR scheduler once they have a negative
|
||||||
@@ -3682,7 +3684,7 @@ void ieee80211_schedule_txq(struct ieee8
|
@@ -3702,7 +3704,7 @@ void ieee80211_schedule_txq(struct ieee8
|
||||||
|
|
||||||
spin_unlock_bh(&local->active_txq_lock[txq->ac]);
|
spin_unlock_bh(&local->active_txq_lock[txq->ac]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,15 +13,15 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
||||||
|
|
||||||
--- a/net/mac80211/tx.c
|
--- a/net/mac80211/tx.c
|
||||||
+++ b/net/mac80211/tx.c
|
+++ b/net/mac80211/tx.c
|
||||||
@@ -3751,6 +3751,7 @@ void __ieee80211_subif_start_xmit(struct
|
@@ -3772,6 +3772,7 @@ void __ieee80211_subif_start_xmit(struct
|
||||||
u32 info_flags)
|
u32 ctrl_flags)
|
||||||
{
|
{
|
||||||
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
|
||||||
+ struct ieee80211_local *local = sdata->local;
|
+ struct ieee80211_local *local = sdata->local;
|
||||||
struct sta_info *sta;
|
struct sta_info *sta;
|
||||||
struct sk_buff *next;
|
struct sk_buff *next;
|
||||||
|
|
||||||
@@ -3764,7 +3765,15 @@ void __ieee80211_subif_start_xmit(struct
|
@@ -3785,7 +3786,15 @@ void __ieee80211_subif_start_xmit(struct
|
||||||
if (ieee80211_lookup_ra_sta(sdata, skb, &sta))
|
if (ieee80211_lookup_ra_sta(sdata, skb, &sta))
|
||||||
goto out_free;
|
goto out_free;
|
||||||
|
|
||||||
|
|
|
@ -54,7 +54,7 @@ Signed-off-by: Johannes Berg <johannes.berg@intel.com>
|
||||||
}
|
}
|
||||||
--- a/net/mac80211/ieee80211_i.h
|
--- a/net/mac80211/ieee80211_i.h
|
||||||
+++ b/net/mac80211/ieee80211_i.h
|
+++ b/net/mac80211/ieee80211_i.h
|
||||||
@@ -2070,7 +2070,8 @@ void ieee80211_send_auth(struct ieee8021
|
@@ -2071,7 +2071,8 @@ void ieee80211_send_auth(struct ieee8021
|
||||||
const u8 *da, const u8 *key, u8 key_len, u8 key_idx,
|
const u8 *da, const u8 *key, u8 key_len, u8 key_idx,
|
||||||
u32 tx_flags);
|
u32 tx_flags);
|
||||||
void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
|
void ieee80211_send_deauth_disassoc(struct ieee80211_sub_if_data *sdata,
|
||||||
|
|
Loading…
Reference in New Issue