mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-21 16:05:29 -04:00
wifi: ath12k: avoid multiple skb_cb fetch in ath12k_mac_mgmt_tx_wmi()
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>
This commit is contained in:
committed by
Jeff Johnson
parent
f5d6b15d95
commit
0ca04ad0cd
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user