wifi: ath12k: avoid multiple skb_cb fetch in ath12k_mac_mgmt_tx_wmi()
authorRameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com>
Tue, 15 Apr 2025 19:58:12 +0000 (01:28 +0530)
committerJeff Johnson <jeff.johnson@oss.qualcomm.com>
Thu, 17 Apr 2025 22:49:35 +0000 (15:49 -0700)
ath12k_mac_mgmt_tx_wmi() fetches ath12k's skb_cb space multiple times from
TX skb which is redundant operation. Save the skb_cb in a local pointer
and use the same instead.

Tested-on: QCN9274 hw2.0 PCI WLAN.WBE.1.3.1-00173-QCAHKSWPL_SILICONZ-1
Tested-on: WCN7850 hw2.0 PCI WLAN.HMT.1.0.c5-00481-QCAHMTSWPL_V1.0_V2.0_SILICONZ-3

Signed-off-by: Rameshkumar Sundaram <rameshkumar.sundaram@oss.qualcomm.com>
Reviewed-by: Vasanthakumar Thiagarajan <vasanthakumar.thiagarajan@oss.qualcomm.com>
Link: https://patch.msgid.link/20250415195812.2633923-3-rameshkumar.sundaram@oss.qualcomm.com
Signed-off-by: Jeff Johnson <jeff.johnson@oss.qualcomm.com>
drivers/net/wireless/ath/ath12k/mac.c

index 6a9a5b8..d170bca 100644 (file)
@@ -7150,6 +7150,7 @@ static int ath12k_mac_mgmt_tx_wmi(struct ath12k *ar, struct ath12k_link_vif *arv
 {
        struct ath12k_base *ab = ar->ab;
        struct ieee80211_hdr *hdr = (struct ieee80211_hdr *)skb->data;
+       struct ath12k_skb_cb *skb_cb = ATH12K_SKB_CB(skb);
        struct ieee80211_tx_info *info;
        enum hal_encrypt_type enctype;
        unsigned int mic_len;
@@ -7159,7 +7160,7 @@ static int ath12k_mac_mgmt_tx_wmi(struct ath12k *ar, struct ath12k_link_vif *arv
 
        lockdep_assert_wiphy(ath12k_ar_to_hw(ar)->wiphy);
 
-       ATH12K_SKB_CB(skb)->ar = ar;
+       skb_cb->ar = ar;
        spin_lock_bh(&ar->txmgmt_idr_lock);
        buf_id = idr_alloc(&ar->txmgmt_idr, skb, 0,
                           ATH12K_TX_MGMT_NUM_PENDING_MAX, GFP_ATOMIC);
@@ -7168,14 +7169,13 @@ static int ath12k_mac_mgmt_tx_wmi(struct ath12k *ar, struct ath12k_link_vif *arv
                return -ENOSPC;
 
        info = IEEE80211_SKB_CB(skb);
-       if ((ATH12K_SKB_CB(skb)->flags & ATH12K_SKB_CIPHER_SET) &&
+       if ((skb_cb->flags & ATH12K_SKB_CIPHER_SET) &&
            !(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)) &&
                     ieee80211_has_protected(hdr->frame_control)) {
-                       enctype =
-                           ath12k_dp_tx_get_encrypt_type(ATH12K_SKB_CB(skb)->cipher);
+                       enctype = ath12k_dp_tx_get_encrypt_type(skb_cb->cipher);
                        mic_len = ath12k_dp_rx_crypto_mic_len(ar, enctype);
                        skb_put(skb, mic_len);
                }
@@ -7188,7 +7188,7 @@ static int ath12k_mac_mgmt_tx_wmi(struct ath12k *ar, struct ath12k_link_vif *arv
                goto err_free_idr;
        }
 
-       ATH12K_SKB_CB(skb)->paddr = paddr;
+       skb_cb->paddr = paddr;
 
        ret = ath12k_wmi_mgmt_send(ar, arvif->vdev_id, buf_id, skb);
        if (ret) {
@@ -7199,7 +7199,7 @@ static int ath12k_mac_mgmt_tx_wmi(struct ath12k *ar, struct ath12k_link_vif *arv
        return 0;
 
 err_unmap_buf:
-       dma_unmap_single(ab->dev, ATH12K_SKB_CB(skb)->paddr,
+       dma_unmap_single(ab->dev, skb_cb->paddr,
                         skb->len, DMA_TO_DEVICE);
 err_free_idr:
        spin_lock_bh(&ar->txmgmt_idr_lock);