]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/commitdiff
mac80211: swap NEED_TXPROCESSING and HW_80211_ENCAP tx flags
authorFelix Fietkau <nbd@nbd.name>
Tue, 8 Sep 2020 12:36:57 +0000 (14:36 +0200)
committerJohannes Berg <johannes.berg@intel.com>
Fri, 18 Sep 2020 10:13:06 +0000 (12:13 +0200)
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>
Link: https://lore.kernel.org/r/20200908123702.88454-10-nbd@nbd.name
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
drivers/net/wireless/ath/ath11k/dp_tx.c
drivers/net/wireless/ath/ath11k/mac.c
include/net/mac80211.h
net/mac80211/mesh_hwmp.c
net/mac80211/mesh_ps.c
net/mac80211/rx.c
net/mac80211/status.c
net/mac80211/tx.c

index 6565d9808042e8ef43bbb8898fba6007867c0ce2..5933800ccd64fd6ccceaf529af33b36a6ad2a742 100644 (file)
@@ -18,7 +18,7 @@ ath11k_dp_tx_get_encap_type(struct ath11k_vif *arvif, struct sk_buff *skb)
        if (test_bit(ATH11K_FLAG_RAW_MODE, &ab->dev_flags))
                return HAL_TCL_ENCAP_TYPE_RAW;
 
-       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;
@@ -98,7 +98,7 @@ int ath11k_dp_tx(struct ath11k *ar, struct ath11k_vif *arvif,
        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;
 
index 1521aaa8e3670a1a8a222b481e385c2584b89e88..7d7b4d80c47fb029480791642f195fbafba2349d 100644 (file)
@@ -3936,7 +3936,7 @@ static int ath11k_mac_mgmt_tx_wmi(struct ath11k *ar, struct ath11k_vif *arvif,
                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)) &&
@@ -4063,7 +4063,7 @@ static void ath11k_mac_op_tx(struct ieee80211_hw *hw,
        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);
index ca270f7d82b954b80986270fba9f6afe48a77a45..3a9ab3c10050a5f324dd18affa9ce1b1b98d6235 100644 (file)
@@ -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),
 };
 
index bec23d2eee7a40df2f6f368032ce299c547d3f4f..313eee12410ec1016c301458a62cc6cbaf4ae3bd 100644 (file)
@@ -212,7 +212,7 @@ static void prepare_frame_for_deferred_tx(struct ieee80211_sub_if_data *sdata,
        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 ieee80211_sub_if_data *sdata,
        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)
index 031e905f684a2b61dc390231bebcdaea60fd8d73..76d19c09d26e0ad23e053f552e74fa13df1d8d4a 100644 (file)
@@ -432,7 +432,7 @@ static void mpsp_qos_null_append(struct sta_info *sta,
 
        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);
 }
index 836cde516a18c079213d9937e56d91c1f9e248f8..b70e44d6f08471b0904d7f995565b1cdb0aaa14c 100644 (file)
@@ -2899,7 +2899,7 @@ ieee80211_rx_h_mesh_fwding(struct ieee80211_rx_data *rx)
        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)) {
index f7686c93174724d69b691476fb013868a26ff577..c5e3ed19ee141ac84973f3ed86e8753f7c3327ec 100644 (file)
@@ -66,8 +66,8 @@ static void ieee80211_handle_filtered_frame(struct ieee80211_local *local,
 
        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++;
index 1e829597f32c0c409b861f3bc42ac0bdf19b49f9..01b30c59d4b4146daab53e18639dce561fdd0099 100644 (file)
@@ -531,7 +531,7 @@ ieee80211_tx_h_unicast_ps_buf(struct ieee80211_tx_data *tx)
 
                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 ieee80211_tx_data *tx,
                                       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_sub_if_data *sdata,
         * 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_txq(struct ieee80211_local *local,
            (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) ||
@@ -3649,7 +3649,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) {
@@ -4239,7 +4239,7 @@ static void ieee80211_8023_xmit(struct ieee80211_sub_if_data *sdata,
                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)
@@ -4364,7 +4364,7 @@ static bool ieee80211_tx_pending_skb(struct ieee80211_local *local,
 
        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);
@@ -4372,7 +4372,7 @@ static bool ieee80211_tx_pending_skb(struct ieee80211_local *local,
                }
                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;