diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath12k/mac.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath12k/mac.c | 34 | 
1 files changed, 18 insertions, 16 deletions
diff --git a/drivers/net/wireless/ath/ath12k/mac.c b/drivers/net/wireless/ath/ath12k/mac.c index 1d7b60aa5cb0..eacab798630a 100644 --- a/drivers/net/wireless/ath/ath12k/mac.c +++ b/drivers/net/wireless/ath/ath12k/mac.c @@ -8290,23 +8290,32 @@ static void ath12k_mgmt_over_wmi_tx_drop(struct ath12k *ar, struct sk_buff *skb)  		wake_up(&ar->txmgmt_empty_waitq);  } -int ath12k_mac_tx_mgmt_pending_free(int buf_id, void *skb, void *ctx) +static void ath12k_mac_tx_mgmt_free(struct ath12k *ar, int buf_id)  { -	struct sk_buff *msdu = skb; +	struct sk_buff *msdu;  	struct ieee80211_tx_info *info; -	struct ath12k *ar = ctx; -	struct ath12k_base *ab = ar->ab;  	spin_lock_bh(&ar->txmgmt_idr_lock); -	idr_remove(&ar->txmgmt_idr, buf_id); +	msdu = idr_remove(&ar->txmgmt_idr, buf_id);  	spin_unlock_bh(&ar->txmgmt_idr_lock); -	dma_unmap_single(ab->dev, ATH12K_SKB_CB(msdu)->paddr, msdu->len, + +	if (!msdu) +		return; + +	dma_unmap_single(ar->ab->dev, ATH12K_SKB_CB(msdu)->paddr, msdu->len,  			 DMA_TO_DEVICE);  	info = IEEE80211_SKB_CB(msdu);  	memset(&info->status, 0, sizeof(info->status)); -	ath12k_mgmt_over_wmi_tx_drop(ar, skb); +	ath12k_mgmt_over_wmi_tx_drop(ar, msdu); +} + +int ath12k_mac_tx_mgmt_pending_free(int buf_id, void *skb, void *ctx) +{ +	struct ath12k *ar = ctx; + +	ath12k_mac_tx_mgmt_free(ar, buf_id);  	return 0;  } @@ -8315,17 +8324,10 @@ static int ath12k_mac_vif_txmgmt_idr_remove(int buf_id, void *skb, void *ctx)  {  	struct ieee80211_vif *vif = ctx;  	struct ath12k_skb_cb *skb_cb = ATH12K_SKB_CB(skb); -	struct sk_buff *msdu = skb;  	struct ath12k *ar = skb_cb->ar; -	struct ath12k_base *ab = ar->ab; -	if (skb_cb->vif == vif) { -		spin_lock_bh(&ar->txmgmt_idr_lock); -		idr_remove(&ar->txmgmt_idr, buf_id); -		spin_unlock_bh(&ar->txmgmt_idr_lock); -		dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, -				 DMA_TO_DEVICE); -	} +	if (skb_cb->vif == vif) +		ath12k_mac_tx_mgmt_free(ar, buf_id);  	return 0;  }  | 
