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
next prev parent reply other threads:[~2021-08-25 9:39 UTC|newest]
Thread overview: 17+ 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 ` [PATCH v2 01/12] ath11k: disable unused CE8 interrupts for ipq8074 P Praneesh
2021-08-25 9:37 ` [PATCH v2 02/12] ath11k: allocate dst ring descriptors from cacheable memory P Praneesh
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 ` [PATCH v2 04/12] ath11k: avoid additional access to ath11k_hal_srng_dst_num_free 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 ` [PATCH v2 06/12] ath11k: remove usage quota while processing rx packets P Praneesh
2021-08-25 9:37 ` P Praneesh [this message]
2021-08-25 22:49 ` [PATCH v2 07/12] ath11k: add branch predictors in process_rx 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 ` [PATCH v2 09/12] ath11k: remove mod operator in dst ring processing 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 ` [PATCH v2 11/12] ath11k: add branch predictors in dp_tx path P Praneesh
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 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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).