DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ajit Khaparde <ajit.khaparde@broadcom.com>
To: dev@dpdk.org
Cc: ferruh.yigit@intel.com,
	Lance Richardson <lance.richardson@broadcom.com>,
	Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>
Subject: [dpdk-dev] [PATCH v2 9/9] net/bnxt: improve CPR handling in vector PMD
Date: Thu,  3 Oct 2019 20:49:03 -0700	[thread overview]
Message-ID: <20191004034903.85233-10-ajit.khaparde@broadcom.com> (raw)
In-Reply-To: <20191004034903.85233-1-ajit.khaparde@broadcom.com>

From: Lance Richardson <lance.richardson@broadcom.com>

Reduce overhead of CPR descriptor validity checking in vector
receive and transmit functions.

Preserve raw cpr consumer index in vector transmit completion
function.

Remove an unneeded prefetch (per benchmarking) from vector
transmit completion function.

Fixes: bc4a000f2f53 ("net/bnxt: implement SSE vector mode")
Signed-off-by: Lance Richardson <lance.richardson@broadcom.com>
Reviewed-by: Ajit Kumar Khaparde <ajit.khaparde@broadcom.com>
---
 drivers/net/bnxt/bnxt_rxtx_vec_sse.c | 26 ++++----------------------
 1 file changed, 4 insertions(+), 22 deletions(-)

diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c
index 029053e305..22d9f9e84a 100644
--- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c
+++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c
@@ -245,10 +245,6 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
 		if (!CMP_VALID(rxcmp, raw_cons, cpr->cp_ring_struct))
 			break;
 
-		cpr->valid = FLIP_VALID(cons,
-					cpr->cp_ring_struct->ring_mask,
-					cpr->valid);
-
 		if (likely(CMP_TYPE(rxcmp) == RX_PKT_CMPL_TYPE_RX_L2)) {
 			struct rx_pkt_cmpl_hi *rxcmp1;
 			uint32_t tmp_raw_cons;
@@ -272,10 +268,6 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
 			rte_prefetch0(mbuf);
 			rxr->rx_buf_ring[cons].mbuf = NULL;
 
-			cpr->valid = FLIP_VALID(cp_cons,
-						cpr->cp_ring_struct->ring_mask,
-						cpr->valid);
-
 			/* Set constant fields from mbuf initializer. */
 			_mm_store_si128((__m128i *)&mbuf->rearm_data,
 					mbuf_init);
@@ -318,22 +310,13 @@ bnxt_recv_pkts_vec(void *rx_queue, struct rte_mbuf **rx_pkts,
 
 	rxq->rxrearm_nb += nb_rx_pkts;
 	cpr->cp_raw_cons = raw_cons;
+	cpr->valid = !!(cpr->cp_raw_cons & cpr->cp_ring_struct->ring_size);
 	if (nb_rx_pkts || evt)
 		bnxt_db_cq(cpr);
 
 	return nb_rx_pkts;
 }
 
-static inline void bnxt_next_cmpl(struct bnxt_cp_ring_info *cpr, uint32_t *idx,
-				  bool *v, uint32_t inc)
-{
-	*idx += inc;
-	if (unlikely(*idx == cpr->cp_ring_struct->ring_size)) {
-		*v = !*v;
-		*idx = 0;
-	}
-}
-
 static void
 bnxt_tx_cmp_vec(struct bnxt_tx_queue *txq, int nr_pkts)
 {
@@ -379,10 +362,8 @@ bnxt_handle_tx_cp_vec(struct bnxt_tx_queue *txq)
 		cons = RING_CMPL(ring_mask, raw_cons);
 		txcmp = (struct tx_cmpl *)&cp_desc_ring[cons];
 
-		if (!CMPL_VALID(txcmp, cpr->valid))
+		if (!CMP_VALID(txcmp, raw_cons, cp_ring_struct))
 			break;
-		bnxt_next_cmpl(cpr, &cons, &cpr->valid, 1);
-		rte_prefetch0(&cp_desc_ring[cons]);
 
 		if (likely(CMP_TYPE(txcmp) == TX_CMPL_TYPE_TX_L2))
 			nb_tx_pkts += txcmp->opaque;
@@ -390,9 +371,10 @@ bnxt_handle_tx_cp_vec(struct bnxt_tx_queue *txq)
 			RTE_LOG_DP(ERR, PMD,
 				   "Unhandled CMP type %02x\n",
 				   CMP_TYPE(txcmp));
-		raw_cons = cons;
+		raw_cons = NEXT_RAW_CMP(raw_cons);
 	} while (nb_tx_pkts < ring_mask);
 
+	cpr->valid = !!(raw_cons & cp_ring_struct->ring_size);
 	if (nb_tx_pkts) {
 		bnxt_tx_cmp_vec(txq, nb_tx_pkts);
 		cpr->cp_raw_cons = raw_cons;
-- 
2.20.1 (Apple Git-117)


  parent reply	other threads:[~2019-10-04  3:54 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-04  3:48 [dpdk-dev] [PATCH v2 0/9] bnxt patchset Ajit Khaparde
2019-10-04  3:48 ` [dpdk-dev] [PATCH v2 1/9] net/bnxt: increase tqm entry allocation Ajit Khaparde
2019-10-04  3:48 ` [dpdk-dev] [PATCH v2 2/9] net/bnxt: fix ring alignment for thor-based adapters Ajit Khaparde
2019-10-04  3:48 ` [dpdk-dev] [PATCH v2 3/9] net/bnxt: add support for LRO on thor adapters Ajit Khaparde
2019-10-04  3:48 ` [dpdk-dev] [PATCH v2 4/9] net/bnxt: add support for CoS classification Ajit Khaparde
2019-10-04  3:48 ` [dpdk-dev] [PATCH v2 5/9] net/bnxt: use common receive transmit nq ring Ajit Khaparde
2019-10-04  3:49 ` [dpdk-dev] [PATCH v2 6/9] net/bnxt: fix stats context calculation Ajit Khaparde
2019-10-04  3:49 ` [dpdk-dev] [PATCH v2 7/9] net/bnxt: use correct default Rx queue for thor Ajit Khaparde
2019-10-04  3:49 ` [dpdk-dev] [PATCH v2 8/9] net/bnxt: advertise scatter receive offload capability Ajit Khaparde
2019-10-04  3:49 ` Ajit Khaparde [this message]
2019-10-07 17:35 ` [dpdk-dev] [PATCH v2 0/9] bnxt patchset Ferruh Yigit

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=20191004034903.85233-10-ajit.khaparde@broadcom.com \
    --to=ajit.khaparde@broadcom.com \
    --cc=dev@dpdk.org \
    --cc=ferruh.yigit@intel.com \
    --cc=lance.richardson@broadcom.com \
    /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).