From: P Praneesh <ppranees@codeaurora.org> To: kvalo@codeaurora.org Cc: ath11k@lists.infradead.org, linux-wireless@vger.kernel.org, P Praneesh <ppranees@codeaurora.org>, Karthikeyan Periyasamy <periyasa@codeaurora.org>, Jouni Malinen <jouni@codeaurora.org> Subject: [PATCH v2 12/12] ath11k: avoid unnecessary lock contention in tx_completion path Date: Wed, 25 Aug 2021 15:07:57 +0530 [thread overview] Message-ID: <1629884277-18759-13-git-send-email-ppranees@codeaurora.org> (raw) In-Reply-To: <1629884277-18759-1-git-send-email-ppranees@codeaurora.org> Avoid unnecessary idr_find calls before the idr_remove calls. Because idr_remove gives the valid ptr if id is valid otherwise return NULL ptr. So removed the idr_find before idr_remove in tx completion path. Also no need to disable the bottom half preempt if it is already in the bottom half context, so modify the spin_lock_bh to spin_lock in the data tx completion path. Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01734-QCAHKSWPL_SILICONZ-1 v2 Co-developed-by: Karthikeyan Periyasamy <periyasa@codeaurora.org> Signed-off-by: Karthikeyan Periyasamy <periyasa@codeaurora.org> Signed-off-by: Jouni Malinen <jouni@codeaurora.org> Signed-off-by: P Praneesh <ppranees@codeaurora.org> --- drivers/net/wireless/ath/ath11k/dp_tx.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/dp_tx.c b/drivers/net/wireless/ath/ath11k/dp_tx.c index ab9ccf0..3e0efad 100644 --- a/drivers/net/wireless/ath/ath11k/dp_tx.c +++ b/drivers/net/wireless/ath/ath11k/dp_tx.c @@ -288,20 +288,18 @@ static void ath11k_dp_tx_free_txbuf(struct ath11k_base *ab, u8 mac_id, struct sk_buff *msdu; struct ath11k_skb_cb *skb_cb; - spin_lock_bh(&tx_ring->tx_idr_lock); - msdu = idr_find(&tx_ring->txbuf_idr, msdu_id); - if (!msdu) { + spin_lock(&tx_ring->tx_idr_lock); + msdu = idr_remove(&tx_ring->txbuf_idr, msdu_id); + spin_unlock(&tx_ring->tx_idr_lock); + + if (unlikely(!msdu)) { ath11k_warn(ab, "tx completion for unknown msdu_id %d\n", msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); return; } skb_cb = ATH11K_SKB_CB(msdu); - idr_remove(&tx_ring->txbuf_idr, msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); - dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE); dev_kfree_skb_any(msdu); @@ -320,12 +318,13 @@ ath11k_dp_tx_htt_tx_complete_buf(struct ath11k_base *ab, struct ath11k_skb_cb *skb_cb; struct ath11k *ar; - spin_lock_bh(&tx_ring->tx_idr_lock); - msdu = idr_find(&tx_ring->txbuf_idr, ts->msdu_id); + spin_lock(&tx_ring->tx_idr_lock); + msdu = idr_remove(&tx_ring->txbuf_idr, ts->msdu_id); + spin_unlock(&tx_ring->tx_idr_lock); + if (unlikely(!msdu)) { ath11k_warn(ab, "htt tx completion for unknown msdu_id %d\n", ts->msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); return; } @@ -334,9 +333,6 @@ ath11k_dp_tx_htt_tx_complete_buf(struct ath11k_base *ab, ar = skb_cb->ar; - idr_remove(&tx_ring->txbuf_idr, ts->msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); - if (atomic_dec_and_test(&ar->dp.num_tx_pending)) wake_up(&ar->dp.tx_empty_waitq); @@ -584,16 +580,15 @@ void ath11k_dp_tx_completion_handler(struct ath11k_base *ab, int ring_id) continue; } - spin_lock_bh(&tx_ring->tx_idr_lock); - msdu = idr_find(&tx_ring->txbuf_idr, msdu_id); + msdu = idr_remove(&tx_ring->txbuf_idr, msdu_id); if (unlikely(!msdu)) { ath11k_warn(ab, "tx completion for unknown msdu_id %d\n", msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); + spin_unlock(&tx_ring->tx_idr_lock); continue; } - idr_remove(&tx_ring->txbuf_idr, msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); + + spin_unlock(&tx_ring->tx_idr_lock); ar = ab->pdevs[mac_id].ar; -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: P Praneesh <ppranees@codeaurora.org> To: kvalo@codeaurora.org Cc: ath11k@lists.infradead.org, linux-wireless@vger.kernel.org, P Praneesh <ppranees@codeaurora.org>, Karthikeyan Periyasamy <periyasa@codeaurora.org>, Jouni Malinen <jouni@codeaurora.org> Subject: [PATCH v2 12/12] ath11k: avoid unnecessary lock contention in tx_completion path Date: Wed, 25 Aug 2021 15:07:57 +0530 [thread overview] Message-ID: <1629884277-18759-13-git-send-email-ppranees@codeaurora.org> (raw) In-Reply-To: <1629884277-18759-1-git-send-email-ppranees@codeaurora.org> Avoid unnecessary idr_find calls before the idr_remove calls. Because idr_remove gives the valid ptr if id is valid otherwise return NULL ptr. So removed the idr_find before idr_remove in tx completion path. Also no need to disable the bottom half preempt if it is already in the bottom half context, so modify the spin_lock_bh to spin_lock in the data tx completion path. Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01734-QCAHKSWPL_SILICONZ-1 v2 Co-developed-by: Karthikeyan Periyasamy <periyasa@codeaurora.org> Signed-off-by: Karthikeyan Periyasamy <periyasa@codeaurora.org> Signed-off-by: Jouni Malinen <jouni@codeaurora.org> Signed-off-by: P Praneesh <ppranees@codeaurora.org> --- drivers/net/wireless/ath/ath11k/dp_tx.c | 31 +++++++++++++------------------ 1 file changed, 13 insertions(+), 18 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/dp_tx.c b/drivers/net/wireless/ath/ath11k/dp_tx.c index ab9ccf0..3e0efad 100644 --- a/drivers/net/wireless/ath/ath11k/dp_tx.c +++ b/drivers/net/wireless/ath/ath11k/dp_tx.c @@ -288,20 +288,18 @@ static void ath11k_dp_tx_free_txbuf(struct ath11k_base *ab, u8 mac_id, struct sk_buff *msdu; struct ath11k_skb_cb *skb_cb; - spin_lock_bh(&tx_ring->tx_idr_lock); - msdu = idr_find(&tx_ring->txbuf_idr, msdu_id); - if (!msdu) { + spin_lock(&tx_ring->tx_idr_lock); + msdu = idr_remove(&tx_ring->txbuf_idr, msdu_id); + spin_unlock(&tx_ring->tx_idr_lock); + + if (unlikely(!msdu)) { ath11k_warn(ab, "tx completion for unknown msdu_id %d\n", msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); return; } skb_cb = ATH11K_SKB_CB(msdu); - idr_remove(&tx_ring->txbuf_idr, msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); - dma_unmap_single(ab->dev, skb_cb->paddr, msdu->len, DMA_TO_DEVICE); dev_kfree_skb_any(msdu); @@ -320,12 +318,13 @@ ath11k_dp_tx_htt_tx_complete_buf(struct ath11k_base *ab, struct ath11k_skb_cb *skb_cb; struct ath11k *ar; - spin_lock_bh(&tx_ring->tx_idr_lock); - msdu = idr_find(&tx_ring->txbuf_idr, ts->msdu_id); + spin_lock(&tx_ring->tx_idr_lock); + msdu = idr_remove(&tx_ring->txbuf_idr, ts->msdu_id); + spin_unlock(&tx_ring->tx_idr_lock); + if (unlikely(!msdu)) { ath11k_warn(ab, "htt tx completion for unknown msdu_id %d\n", ts->msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); return; } @@ -334,9 +333,6 @@ ath11k_dp_tx_htt_tx_complete_buf(struct ath11k_base *ab, ar = skb_cb->ar; - idr_remove(&tx_ring->txbuf_idr, ts->msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); - if (atomic_dec_and_test(&ar->dp.num_tx_pending)) wake_up(&ar->dp.tx_empty_waitq); @@ -584,16 +580,15 @@ void ath11k_dp_tx_completion_handler(struct ath11k_base *ab, int ring_id) continue; } - spin_lock_bh(&tx_ring->tx_idr_lock); - msdu = idr_find(&tx_ring->txbuf_idr, msdu_id); + msdu = idr_remove(&tx_ring->txbuf_idr, msdu_id); if (unlikely(!msdu)) { ath11k_warn(ab, "tx completion for unknown msdu_id %d\n", msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); + spin_unlock(&tx_ring->tx_idr_lock); continue; } - idr_remove(&tx_ring->txbuf_idr, msdu_id); - spin_unlock_bh(&tx_ring->tx_idr_lock); + + spin_unlock(&tx_ring->tx_idr_lock); ar = ab->pdevs[mac_id].ar; -- 2.7.4 -- ath11k mailing list ath11k@lists.infradead.org http://lists.infradead.org/mailman/listinfo/ath11k
next prev parent reply other threads:[~2021-08-25 9:39 UTC|newest] Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-08-25 9:37 [PATCH v2 00/12] ath11k: optimizations in data path P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 9:37 ` [PATCH v2 01/12] ath11k: disable unused CE8 interrupts for ipq8074 P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 9:37 ` [PATCH v2 02/12] ath11k: allocate dst ring descriptors from cacheable memory P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 18:45 ` Peter Oh 2021-08-25 18:45 ` Peter Oh 2021-08-25 9:37 ` [PATCH v2 03/12] ath11k: modify dp_rx desc access wrapper calls inline P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 9:37 ` [PATCH v2 04/12] ath11k: avoid additional access to ath11k_hal_srng_dst_num_free P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 9:37 ` [PATCH v2 05/12] ath11k: avoid active pdev check for each msdu P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 9:37 ` [PATCH v2 06/12] ath11k: remove usage quota while processing rx packets P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 9:37 ` [PATCH v2 07/12] ath11k: add branch predictors in process_rx P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 22:49 ` Sergey Ryazanov 2021-08-25 22:49 ` Sergey Ryazanov 2021-08-25 9:37 ` [PATCH v2 08/12] ath11k: allocate HAL_WBM2SW_RELEASE ring from cacheable memory P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 9:37 ` [PATCH v2 09/12] ath11k: remove mod operator in dst ring processing P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 9:37 ` [PATCH v2 10/12] ath11k: avoid while loop in ring selection of tx completion interrupt P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 9:37 ` [PATCH v2 11/12] ath11k: add branch predictors in dp_tx path P Praneesh 2021-08-25 9:37 ` P Praneesh 2021-08-25 23:02 ` Sergey Ryazanov 2021-08-25 23:02 ` Sergey Ryazanov 2021-08-25 9:37 ` P Praneesh [this message] 2021-08-25 9:37 ` [PATCH v2 12/12] ath11k: avoid unnecessary lock contention in tx_completion path P Praneesh 2021-08-25 21:56 ` Peter Oh 2021-08-25 21:56 ` Peter Oh
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1629884277-18759-13-git-send-email-ppranees@codeaurora.org \ --to=ppranees@codeaurora.org \ --cc=ath11k@lists.infradead.org \ --cc=jouni@codeaurora.org \ --cc=kvalo@codeaurora.org \ --cc=linux-wireless@vger.kernel.org \ --cc=periyasa@codeaurora.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.