From patchwork Wed May 15 18:08:16 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ajit Khaparde X-Patchwork-Id: 53446 X-Patchwork-Delegate: ferruh.yigit@amd.com Return-Path: X-Original-To: patchwork@dpdk.org Delivered-To: patchwork@dpdk.org Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 877E05F72; Wed, 15 May 2019 20:08:33 +0200 (CEST) Received: from rnd-relay.smtp.broadcom.com (rnd-relay.smtp.broadcom.com [192.19.229.170]) by dpdk.org (Postfix) with ESMTP id D2E7F5F14 for ; Wed, 15 May 2019 20:08:24 +0200 (CEST) Received: from nis-sj1-27.broadcom.com (nis-sj1-27.lvn.broadcom.net [10.75.144.136]) by rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 9BBAA30C0B7; Wed, 15 May 2019 11:08:22 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com 9BBAA30C0B7 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1557943702; bh=Gq42Kz7Xo2g9dOVWAvDWrAc8Z+a9xqD16CN9Ue88F28=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vVy3CGGV84mJ9C7LevpwLnBXU/WU8HFvuw91EbWK6gcPDkIkTGlgPE1Qd0qLRWxDN mo9+YOQ/BECytJPJL832kquud0I0Jc1+vmE1WNzNVajHAePTINYzbBseZa5PDF3c05 jIf9ZUBS6uW5HmJBHDyk6tIyFYr9mWwP9BXGjDHg= Received: from C02VPB22HTD6.wifi.broadcom.net (c02vpb22htd6.wifi.broadcom.net [10.69.74.102]) by nis-sj1-27.broadcom.com (Postfix) with ESMTP id 77CDCAC0709; Wed, 15 May 2019 11:08:23 -0700 (PDT) From: Ajit Khaparde To: dev@dpdk.org Cc: ferruh.yigit@intel.com, Sriharsha Basavapatna , Ajit Kumar Khaparde Date: Wed, 15 May 2019 11:08:16 -0700 Message-Id: <20190515180817.71523-6-ajit.khaparde@broadcom.com> X-Mailer: git-send-email 2.20.1 (Apple Git-117) In-Reply-To: <20190515180817.71523-1-ajit.khaparde@broadcom.com> References: <20190515180817.71523-1-ajit.khaparde@broadcom.com> MIME-Version: 1.0 Subject: [dpdk-dev] [PATCH 5/6] net/bnxt: optimize Tx batching code X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" From: Sriharsha Basavapatna This patch adds a few optimizations to Tx batching. Instead of specifying 'cmpl_next' to bnxt_start_xmit() as a hint to enable completion for a given packet, request for completion on the last successfully enqueued TxBD. This takes care of both success and error cases. It eliminates 'cmpl_next' arg and related per-packet condition checks around it. Fixes: 5735eb241947 ("net/bnxt: support Tx batching") Signed-off-by: Sriharsha Basavapatna Reviewed-by: Ajit Kumar Khaparde Signed-off-by: Ajit Khaparde --- drivers/net/bnxt/bnxt_txr.c | 32 +++++++++----------------------- 1 file changed, 9 insertions(+), 23 deletions(-) diff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c index 186934136..b15778b39 100644 --- a/drivers/net/bnxt/bnxt_txr.c +++ b/drivers/net/bnxt/bnxt_txr.c @@ -121,7 +121,6 @@ static inline uint32_t bnxt_tx_avail(struct bnxt_tx_queue *txq) static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt, struct bnxt_tx_queue *txq, uint16_t *coal_pkts, - uint16_t *cmpl_next, struct tx_bd_long **last_txbd) { struct bnxt_tx_ring_info *txr = txq->tx_ring; @@ -184,12 +183,7 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt, txbd->opaque = *coal_pkts; txbd->flags_type = nr_bds << TX_BD_LONG_FLAGS_BD_CNT_SFT; txbd->flags_type |= TX_BD_SHORT_FLAGS_COAL_NOW; - if (!*cmpl_next) { - txbd->flags_type |= TX_BD_LONG_FLAGS_NO_CMPL; - } else { - *coal_pkts = 0; - *cmpl_next = false; - } + txbd->flags_type |= TX_BD_LONG_FLAGS_NO_CMPL; txbd->len = tx_pkt->data_len; if (tx_pkt->pkt_len >= 2014) txbd->flags_type |= TX_BD_LONG_FLAGS_LHINT_GTE2K; @@ -415,10 +409,10 @@ static int bnxt_handle_tx_cp(struct bnxt_tx_queue *txq) uint16_t bnxt_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts) { - struct bnxt_tx_queue *txq = tx_queue; + int rc; uint16_t nb_tx_pkts = 0; uint16_t coal_pkts = 0; - uint16_t cmpl_next = 0; + struct bnxt_tx_queue *txq = tx_queue; struct tx_bd_long *last_txbd = NULL; /* Handle TX completions */ @@ -432,27 +426,19 @@ uint16_t bnxt_xmit_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, /* Handle TX burst request */ for (nb_tx_pkts = 0; nb_tx_pkts < nb_pkts; nb_tx_pkts++) { - int rc; - - /* Request a completion on the last packet */ - cmpl_next |= (nb_pkts == nb_tx_pkts + 1); coal_pkts++; rc = bnxt_start_xmit(tx_pkts[nb_tx_pkts], txq, - &coal_pkts, &cmpl_next, &last_txbd); + &coal_pkts, &last_txbd); - if (unlikely(rc)) { - /* Request a completion on the last successfully - * enqueued packet - */ - if (last_txbd) - last_txbd->flags_type &= - ~TX_BD_LONG_FLAGS_NO_CMPL; + if (unlikely(rc)) break; - } } - if (nb_tx_pkts) + if (likely(nb_tx_pkts)) { + /* Request a completion on the last packet */ + last_txbd->flags_type &= ~TX_BD_LONG_FLAGS_NO_CMPL; B_TX_DB(txq->tx_ring->tx_doorbell, txq->tx_ring->tx_prod); + } return nb_tx_pkts; }