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>, Sriram R <srirrama@codeaurora.org>, Jouni Malinen <jouni@codeaurora.org> Subject: [PATCH v2 07/12] ath11k: add branch predictors in process_rx Date: Wed, 25 Aug 2021 15:07:52 +0530 [thread overview] Message-ID: <1629884277-18759-8-git-send-email-ppranees@codeaurora.org> (raw) In-Reply-To: <1629884277-18759-1-git-send-email-ppranees@codeaurora.org> In datapath, add branch predictors where required in the process rx(). This protects high value rx path without having performance overhead. Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1.r2-00012-QCAHKSWPL_SILICONZ-1 Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01695-QCAHKSWPL_SILICONZ-1 Co-developed-by: Sriram R <srirrama@codeaurora.org> Signed-off-by: Sriram R <srirrama@codeaurora.org> Signed-off-by: Jouni Malinen <jouni@codeaurora.org> Signed-off-by: P Praneesh <ppranees@codeaurora.org> --- drivers/net/wireless/ath/ath11k/dp_rx.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c index e105bdc..5d805881 100644 --- a/drivers/net/wireless/ath/ath11k/dp_rx.c +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c @@ -2535,13 +2535,13 @@ static void ath11k_dp_rx_process_received_packets(struct ath11k_base *ab, rcu_read_lock(); ar = ab->pdevs[mac_id].ar; - if (!rcu_dereference(ab->pdevs_active[mac_id])) { + if (unlikely(!rcu_dereference(ab->pdevs_active[mac_id]))) { __skb_queue_purge(msdu_list); rcu_read_unlock(); return; } - if (test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags)) { + if (unlikely(test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags))) { __skb_queue_purge(msdu_list); rcu_read_unlock(); return; @@ -2549,7 +2549,7 @@ static void ath11k_dp_rx_process_received_packets(struct ath11k_base *ab, while ((msdu = __skb_dequeue(msdu_list))) { ret = ath11k_dp_rx_process_msdu(ar, msdu, msdu_list); - if (ret) { + if (unlikely(ret)) { ath11k_dbg(ab, ATH11K_DBG_DATA, "Unable to process msdu %d", ret); dev_kfree_skb_any(msdu); @@ -2604,7 +2604,7 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id, rx_ring = &ar->dp.rx_refill_buf_ring; spin_lock_bh(&rx_ring->idr_lock); msdu = idr_find(&rx_ring->bufs_idr, buf_id); - if (!msdu) { + if (unlikely(!msdu)) { ath11k_warn(ab, "frame rx with invalid buf_id %d\n", buf_id); spin_unlock_bh(&rx_ring->idr_lock); @@ -2623,8 +2623,8 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id, push_reason = FIELD_GET(HAL_REO_DEST_RING_INFO0_PUSH_REASON, desc->info0); - if (push_reason != - HAL_REO_DEST_RING_PUSH_REASON_ROUTING_INSTRUCTION) { + if (unlikely(push_reason != + HAL_REO_DEST_RING_PUSH_REASON_ROUTING_INSTRUCTION)) { dev_kfree_skb_any(msdu); ab->soc_stats.hal_reo_error[dp->reo_dst_ring[ring_id].ring_id]++; continue; @@ -2659,7 +2659,7 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id, * head pointer so that we can reap complete MPDU in the current * rx processing. */ - if (!done && ath11k_hal_srng_dst_num_free(ab, srng, true)) { + if (unlikely(!done && ath11k_hal_srng_dst_num_free(ab, srng, true))) { ath11k_hal_srng_access_end(ab, srng); goto try_again; } @@ -2668,7 +2668,7 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id, spin_unlock_bh(&srng->lock); - if (!total_msdu_reaped) + if (unlikely(!total_msdu_reaped)) goto exit; for (i = 0; i < ab->num_radios; i++) { -- 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>, Sriram R <srirrama@codeaurora.org>, Jouni Malinen <jouni@codeaurora.org> Subject: [PATCH v2 07/12] ath11k: add branch predictors in process_rx Date: Wed, 25 Aug 2021 15:07:52 +0530 [thread overview] Message-ID: <1629884277-18759-8-git-send-email-ppranees@codeaurora.org> (raw) In-Reply-To: <1629884277-18759-1-git-send-email-ppranees@codeaurora.org> In datapath, add branch predictors where required in the process rx(). This protects high value rx path without having performance overhead. Tested-on: QCN9074 hw1.0 PCI WLAN.HK.2.4.0.1.r2-00012-QCAHKSWPL_SILICONZ-1 Tested-on: IPQ8074 hw2.0 AHB WLAN.HK.2.4.0.1-01695-QCAHKSWPL_SILICONZ-1 Co-developed-by: Sriram R <srirrama@codeaurora.org> Signed-off-by: Sriram R <srirrama@codeaurora.org> Signed-off-by: Jouni Malinen <jouni@codeaurora.org> Signed-off-by: P Praneesh <ppranees@codeaurora.org> --- drivers/net/wireless/ath/ath11k/dp_rx.c | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/drivers/net/wireless/ath/ath11k/dp_rx.c b/drivers/net/wireless/ath/ath11k/dp_rx.c index e105bdc..5d805881 100644 --- a/drivers/net/wireless/ath/ath11k/dp_rx.c +++ b/drivers/net/wireless/ath/ath11k/dp_rx.c @@ -2535,13 +2535,13 @@ static void ath11k_dp_rx_process_received_packets(struct ath11k_base *ab, rcu_read_lock(); ar = ab->pdevs[mac_id].ar; - if (!rcu_dereference(ab->pdevs_active[mac_id])) { + if (unlikely(!rcu_dereference(ab->pdevs_active[mac_id]))) { __skb_queue_purge(msdu_list); rcu_read_unlock(); return; } - if (test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags)) { + if (unlikely(test_bit(ATH11K_CAC_RUNNING, &ar->dev_flags))) { __skb_queue_purge(msdu_list); rcu_read_unlock(); return; @@ -2549,7 +2549,7 @@ static void ath11k_dp_rx_process_received_packets(struct ath11k_base *ab, while ((msdu = __skb_dequeue(msdu_list))) { ret = ath11k_dp_rx_process_msdu(ar, msdu, msdu_list); - if (ret) { + if (unlikely(ret)) { ath11k_dbg(ab, ATH11K_DBG_DATA, "Unable to process msdu %d", ret); dev_kfree_skb_any(msdu); @@ -2604,7 +2604,7 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id, rx_ring = &ar->dp.rx_refill_buf_ring; spin_lock_bh(&rx_ring->idr_lock); msdu = idr_find(&rx_ring->bufs_idr, buf_id); - if (!msdu) { + if (unlikely(!msdu)) { ath11k_warn(ab, "frame rx with invalid buf_id %d\n", buf_id); spin_unlock_bh(&rx_ring->idr_lock); @@ -2623,8 +2623,8 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id, push_reason = FIELD_GET(HAL_REO_DEST_RING_INFO0_PUSH_REASON, desc->info0); - if (push_reason != - HAL_REO_DEST_RING_PUSH_REASON_ROUTING_INSTRUCTION) { + if (unlikely(push_reason != + HAL_REO_DEST_RING_PUSH_REASON_ROUTING_INSTRUCTION)) { dev_kfree_skb_any(msdu); ab->soc_stats.hal_reo_error[dp->reo_dst_ring[ring_id].ring_id]++; continue; @@ -2659,7 +2659,7 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id, * head pointer so that we can reap complete MPDU in the current * rx processing. */ - if (!done && ath11k_hal_srng_dst_num_free(ab, srng, true)) { + if (unlikely(!done && ath11k_hal_srng_dst_num_free(ab, srng, true))) { ath11k_hal_srng_access_end(ab, srng); goto try_again; } @@ -2668,7 +2668,7 @@ int ath11k_dp_process_rx(struct ath11k_base *ab, int ring_id, spin_unlock_bh(&srng->lock); - if (!total_msdu_reaped) + if (unlikely(!total_msdu_reaped)) goto exit; for (i = 0; i < ab->num_radios; i++) { -- 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 ` P Praneesh [this message] 2021-08-25 9:37 ` [PATCH v2 07/12] ath11k: add branch predictors in process_rx 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 ` [PATCH v2 12/12] ath11k: avoid unnecessary lock contention in tx_completion path P Praneesh 2021-08-25 9:37 ` 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-8-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=srirrama@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.