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>
227 lines
9.1 KiB
Diff
227 lines
9.1 KiB
Diff
From: Felix Fietkau <nbd@nbd.name>
|
|
Date: Mon, 17 Aug 2020 13:35:32 +0200
|
|
Subject: [PATCH] mac80211: swap NEED_TXPROCESSING and HW_80211_ENCAP tx
|
|
flags
|
|
|
|
In order to unify the tx status path, the hw 802.11 encapsulation flag
|
|
needs to survive the trip to the tx status call.
|
|
Since we don't have any free bits in info->flags, we need to move one.
|
|
IEEE80211_TX_INTFL_NEED_TXPROCESSING is only used internally in mac80211,
|
|
and only before the call into the driver.
|
|
|
|
Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|
---
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/dp_tx.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/dp_tx.c
|
|
@@ -14,7 +14,7 @@ ath11k_dp_tx_get_encap_type(struct ath11
|
|
{
|
|
struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
|
|
|
|
- if (tx_info->control.flags & IEEE80211_TX_CTRL_HW_80211_ENCAP)
|
|
+ if (tx_info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP)
|
|
return HAL_TCL_ENCAP_TYPE_ETHERNET;
|
|
|
|
return HAL_TCL_ENCAP_TYPE_NATIVE_WIFI;
|
|
@@ -93,7 +93,7 @@ int ath11k_dp_tx(struct ath11k *ar, stru
|
|
if (test_bit(ATH11K_FLAG_CRASH_FLUSH, &ar->ab->dev_flags))
|
|
return -ESHUTDOWN;
|
|
|
|
- if (!(info->control.flags & IEEE80211_TX_CTRL_HW_80211_ENCAP) &&
|
|
+ if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) &&
|
|
!ieee80211_is_data(hdr->frame_control))
|
|
return -ENOTSUPP;
|
|
|
|
--- a/drivers/net/wireless/ath/ath11k/mac.c
|
|
+++ b/drivers/net/wireless/ath/ath11k/mac.c
|
|
@@ -3898,7 +3898,7 @@ static int ath11k_mac_mgmt_tx_wmi(struct
|
|
return -ENOSPC;
|
|
|
|
info = IEEE80211_SKB_CB(skb);
|
|
- if (!(info->control.flags & IEEE80211_TX_CTRL_HW_80211_ENCAP)) {
|
|
+ if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP)) {
|
|
if ((ieee80211_is_action(hdr->frame_control) ||
|
|
ieee80211_is_deauth(hdr->frame_control) ||
|
|
ieee80211_is_disassoc(hdr->frame_control)) &&
|
|
@@ -4025,7 +4025,7 @@ static void ath11k_mac_op_tx(struct ieee
|
|
bool is_prb_rsp;
|
|
int ret;
|
|
|
|
- if (info->control.flags & IEEE80211_TX_CTRL_HW_80211_ENCAP) {
|
|
+ if (info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) {
|
|
skb_cb->flags |= ATH11K_SKB_HW_80211_ENCAP;
|
|
} else if (ieee80211_is_mgmt(hdr->frame_control)) {
|
|
is_prb_rsp = ieee80211_is_probe_resp(hdr->frame_control);
|
|
--- a/include/net/mac80211.h
|
|
+++ b/include/net/mac80211.h
|
|
@@ -720,9 +720,8 @@ struct ieee80211_bss_conf {
|
|
* @IEEE80211_TX_INTFL_OFFCHAN_TX_OK: Internal to mac80211. Used to indicate
|
|
* that a frame can be transmitted while the queues are stopped for
|
|
* off-channel operation.
|
|
- * @IEEE80211_TX_INTFL_NEED_TXPROCESSING: completely internal to mac80211,
|
|
- * used to indicate that a pending frame requires TX processing before
|
|
- * it can be sent out.
|
|
+ * @IEEE80211_TX_CTL_HW_80211_ENCAP: This frame uses hardware encapsulation
|
|
+ * (header conversion)
|
|
* @IEEE80211_TX_INTFL_RETRIED: completely internal to mac80211,
|
|
* used to indicate that a frame was already retried due to PS
|
|
* @IEEE80211_TX_INTFL_DONT_ENCRYPT: completely internal to mac80211,
|
|
@@ -791,7 +790,7 @@ enum mac80211_tx_info_flags {
|
|
IEEE80211_TX_STAT_AMPDU_NO_BACK = BIT(11),
|
|
IEEE80211_TX_CTL_RATE_CTRL_PROBE = BIT(12),
|
|
IEEE80211_TX_INTFL_OFFCHAN_TX_OK = BIT(13),
|
|
- IEEE80211_TX_INTFL_NEED_TXPROCESSING = BIT(14),
|
|
+ IEEE80211_TX_CTL_HW_80211_ENCAP = BIT(14),
|
|
IEEE80211_TX_INTFL_RETRIED = BIT(15),
|
|
IEEE80211_TX_INTFL_DONT_ENCRYPT = BIT(16),
|
|
IEEE80211_TX_CTL_NO_PS_BUFFER = BIT(17),
|
|
@@ -823,8 +822,9 @@ enum mac80211_tx_info_flags {
|
|
* @IEEE80211_TX_CTRL_AMSDU: This frame is an A-MSDU frame
|
|
* @IEEE80211_TX_CTRL_FAST_XMIT: This frame is going through the fast_xmit path
|
|
* @IEEE80211_TX_CTRL_SKIP_MPATH_LOOKUP: This frame skips mesh path lookup
|
|
- * @IEEE80211_TX_CTRL_HW_80211_ENCAP: This frame uses hardware encapsulation
|
|
- * (header conversion)
|
|
+ * @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.
|
|
*
|
|
@@ -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
|
|
skb->priority = 7;
|
|
|
|
info->control.vif = &sdata->vif;
|
|
- info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
|
+ info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
|
|
ieee80211_set_qos_hdr(sdata, skb);
|
|
ieee80211_mps_set_frame_flags(sdata, NULL, hdr);
|
|
}
|
|
@@ -1163,7 +1163,7 @@ int mesh_nexthop_resolve(struct ieee8021
|
|
if (skb_queue_len(&mpath->frame_queue) >= MESH_FRAME_QUEUE_LEN)
|
|
skb_to_free = skb_dequeue(&mpath->frame_queue);
|
|
|
|
- info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
|
+ info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
|
|
ieee80211_set_qos_hdr(sdata, skb);
|
|
skb_queue_tail(&mpath->frame_queue, skb);
|
|
if (skb_to_free)
|
|
--- a/net/mac80211/mesh_ps.c
|
|
+++ b/net/mac80211/mesh_ps.c
|
|
@@ -432,7 +432,7 @@ static void mpsp_qos_null_append(struct
|
|
|
|
info = IEEE80211_SKB_CB(new_skb);
|
|
info->control.vif = &sdata->vif;
|
|
- info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
|
+ info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
|
|
|
|
__skb_queue_tail(frames, new_skb);
|
|
}
|
|
--- a/net/mac80211/rx.c
|
|
+++ b/net/mac80211/rx.c
|
|
@@ -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));
|
|
- info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
|
+ info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
|
|
info->control.vif = &rx->sdata->vif;
|
|
info->control.jiffies = jiffies;
|
|
if (is_multicast_ether_addr(fwd_hdr->addr1)) {
|
|
--- a/net/mac80211/status.c
|
|
+++ b/net/mac80211/status.c
|
|
@@ -66,8 +66,8 @@ static void ieee80211_handle_filtered_fr
|
|
|
|
info->control.jiffies = jiffies;
|
|
info->control.vif = &sta->sdata->vif;
|
|
- info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING |
|
|
- IEEE80211_TX_INTFL_RETRANSMISSION;
|
|
+ info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
|
|
+ info->flags |= IEEE80211_TX_INTFL_RETRANSMISSION;
|
|
info->flags &= ~IEEE80211_TX_TEMPORARY_FLAGS;
|
|
|
|
sta->status_stats.filtered++;
|
|
--- a/net/mac80211/tx.c
|
|
+++ b/net/mac80211/tx.c
|
|
@@ -531,7 +531,7 @@ ieee80211_tx_h_unicast_ps_buf(struct iee
|
|
|
|
info->control.jiffies = jiffies;
|
|
info->control.vif = &tx->sdata->vif;
|
|
- info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
|
+ info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
|
|
info->flags &= ~IEEE80211_TX_TEMPORARY_FLAGS;
|
|
skb_queue_tail(&sta->ps_tx_buf[ac], tx->skb);
|
|
spin_unlock(&sta->ps_lock);
|
|
@@ -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;
|
|
- info->flags |= IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
|
+ info->control.flags |= IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
|
|
info->flags &= ~IEEE80211_TX_TEMPORARY_FLAGS;
|
|
__skb_queue_tail(&tid_tx->pending, skb);
|
|
if (skb_queue_len(&tid_tx->pending) > STA_MAX_TX_BUFFER)
|
|
@@ -1179,7 +1179,7 @@ ieee80211_tx_prepare(struct ieee80211_su
|
|
* we are doing the needed processing, so remove the flag
|
|
* now.
|
|
*/
|
|
- info->flags &= ~IEEE80211_TX_INTFL_NEED_TXPROCESSING;
|
|
+ info->control.flags &= ~IEEE80211_TX_INTCFL_NEED_TXPROCESSING;
|
|
|
|
hdr = (struct ieee80211_hdr *) skb->data;
|
|
|
|
@@ -1258,7 +1258,7 @@ static struct txq_info *ieee80211_get_tx
|
|
(info->control.flags & IEEE80211_TX_CTRL_PS_RESPONSE))
|
|
return NULL;
|
|
|
|
- if (!(info->control.flags & IEEE80211_TX_CTRL_HW_80211_ENCAP) &&
|
|
+ if (!(info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP) &&
|
|
unlikely(!ieee80211_is_data_present(hdr->frame_control))) {
|
|
if ((!ieee80211_is_mgmt(hdr->frame_control) ||
|
|
ieee80211_is_bufferable_mmpdu(hdr->frame_control) ||
|
|
@@ -3637,7 +3637,7 @@ begin:
|
|
else
|
|
info->flags &= ~IEEE80211_TX_CTL_AMPDU;
|
|
|
|
- if (info->control.flags & IEEE80211_TX_CTRL_HW_80211_ENCAP)
|
|
+ if (info->flags & IEEE80211_TX_CTL_HW_80211_ENCAP)
|
|
goto encap_out;
|
|
|
|
if (info->control.flags & IEEE80211_TX_CTRL_FAST_XMIT) {
|
|
@@ -4227,7 +4227,7 @@ static void ieee80211_8023_xmit(struct i
|
|
sdata = container_of(sdata->bss,
|
|
struct ieee80211_sub_if_data, u.ap);
|
|
|
|
- info->control.flags |= IEEE80211_TX_CTRL_HW_80211_ENCAP;
|
|
+ info->flags |= IEEE80211_TX_CTL_HW_80211_ENCAP;
|
|
info->control.vif = &sdata->vif;
|
|
|
|
if (key)
|
|
@@ -4352,7 +4352,7 @@ static bool ieee80211_tx_pending_skb(str
|
|
|
|
sdata = vif_to_sdata(info->control.vif);
|
|
|
|
- if (info->flags & IEEE80211_TX_INTFL_NEED_TXPROCESSING) {
|
|
+ if (info->control.flags & IEEE80211_TX_INTCFL_NEED_TXPROCESSING) {
|
|
chanctx_conf = rcu_dereference(sdata->vif.chanctx_conf);
|
|
if (unlikely(!chanctx_conf)) {
|
|
dev_kfree_skb(skb);
|
|
@@ -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);
|
|
- } 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)) {
|
|
dev_kfree_skb(skb);
|
|
return true;
|