From patchwork Fri Oct 9 16:36:42 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Lance Richardson X-Patchwork-Id: 80201 X-Patchwork-Delegate: ajit.khaparde@broadcom.com Return-Path: X-Original-To: patchwork@inbox.dpdk.org Delivered-To: patchwork@inbox.dpdk.org Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id 0DC04A04BC; Fri, 9 Oct 2020 18:36:57 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 4B9BB1BCA7; Fri, 9 Oct 2020 18:36:55 +0200 (CEST) Received: from mail-pl1-f194.google.com (mail-pl1-f194.google.com [209.85.214.194]) by dpdk.org (Postfix) with ESMTP id 1910729D6 for ; Fri, 9 Oct 2020 18:36:53 +0200 (CEST) Received: by mail-pl1-f194.google.com with SMTP id o9so4701470plx.10 for ; Fri, 09 Oct 2020 09:36:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=broadcom.com; s=google; h=from:to:cc:subject:date:message-id:mime-version; bh=wJRANCtfS6OrubME7NNRulJkBxyTYpLrA+rkeXfWTUM=; b=baIVCOgU2u072atO1sSgFgQCb/ryHNABHOaYoXuMKE6+iWNYZbabioGvOhCxpyzJ64 UYHg3Qsfu07FaRfSsgBQrwe3UR65qrAwKtt3/PTBZrKMcyJI0IK5UebkZw2ckhprVp7m mozIo2bQ07OxnJpPjvuZSdS7h40xAGVxTXnOk= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version; bh=wJRANCtfS6OrubME7NNRulJkBxyTYpLrA+rkeXfWTUM=; b=Jv26korz0p/imm/k2PUoT55xhVkigwKq6ToQqoVZpUp1xbokQ9isukI65S3aVkCT1P LvpJhiO6XnP3ao4slFnPh9exE0z4LG2E1GYvruihIRmJvXkg7dISTRPog990+eHnLBi4 fNwRzUZuUk/jIz45VBgIdomcWxnQqaUcsMa5R2BEGPctLmyhRdhtx9BcsKaswxWeRoAC cknziwWR4YGo0VM5Hl5UxsLqBDAtQefGxbrbh4VtPn229dTEWko7DmgkamjWekCD4S76 TOhyBJyBTFiWSkGGXgXb/isMufuPSYMTuYrYdQuLPuOK8KGkZfnClqAZVYP4IwDBMcW8 KVZg== X-Gm-Message-State: AOAM531cAw3VQg5XkV0yIujhGkZWZzYXZVJzbADXuSLzIGz6Qu/dmBXc Smca4+5UFPkBqFzcSMDnsDB6IQ== X-Google-Smtp-Source: ABdhPJxseJ59kJwpNQUFUIxWFHmrkDhIaVlgXS0ysVDw0260lyHsPr/JcAa7NvzGq58bQOWvAD0thA== X-Received: by 2002:a17:902:8543:b029:d3:9c44:7230 with SMTP id d3-20020a1709028543b02900d39c447230mr12793126plo.10.1602261411125; Fri, 09 Oct 2020 09:36:51 -0700 (PDT) Received: from localhost.localdomain ([192.19.231.250]) by smtp.gmail.com with ESMTPSA id a15sm11708563pgi.69.2020.10.09.09.36.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 09 Oct 2020 09:36:50 -0700 (PDT) From: Lance Richardson To: Ajit Khaparde , Somnath Kotur Cc: dev@dpdk.org Date: Fri, 9 Oct 2020 12:36:42 -0400 Message-Id: <20201009163642.126939-1-lance.richardson@broadcom.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 X-Content-Filtered-By: Mailman/MimeDel 2.1.15 Subject: [dpdk-dev] [PATCH] net/bnxt: fix non-vector fast mbuf free offload 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" The fast mbuf free offload for non-vector mode requires additional checks in order to handle long tx buffer descriptors, so dedicated functions are needed for vector- and non-vector-modes. Fixes: 103169df2880 ("net/bnxt: support fast mbuf free") Signed-off-by: Lance Richardson Reviewed-by: Ajit Kumar Khaparde --- drivers/net/bnxt/bnxt_rxtx_vec_common.h | 27 ++++++++++++++++++++ drivers/net/bnxt/bnxt_rxtx_vec_neon.c | 2 +- drivers/net/bnxt/bnxt_rxtx_vec_sse.c | 2 +- drivers/net/bnxt/bnxt_txr.c | 34 +++++++++++++++++++++++++ drivers/net/bnxt/bnxt_txr.h | 27 -------------------- 5 files changed, 63 insertions(+), 29 deletions(-) diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_common.h b/drivers/net/bnxt/bnxt_rxtx_vec_common.h index 33ac53568..d540e9eee 100644 --- a/drivers/net/bnxt/bnxt_rxtx_vec_common.h +++ b/drivers/net/bnxt/bnxt_rxtx_vec_common.h @@ -95,6 +95,33 @@ bnxt_rxq_rearm(struct bnxt_rx_queue *rxq, struct bnxt_rx_ring_info *rxr) rxq->rxrearm_nb -= nb; } +/* + * Transmit completion function for use when DEV_TX_OFFLOAD_MBUF_FAST_FREE + * is enabled. + */ +static inline void +bnxt_tx_cmp_vec_fast(struct bnxt_tx_queue *txq, int nr_pkts) +{ + struct bnxt_tx_ring_info *txr = txq->tx_ring; + uint32_t ring_mask = txr->tx_ring_struct->ring_mask; + struct rte_mbuf **free = txq->free; + uint16_t cons = txr->tx_cons; + unsigned int blk = 0; + + while (nr_pkts--) { + struct bnxt_sw_tx_bd *tx_buf; + + tx_buf = &txr->tx_buf_ring[cons]; + cons = (cons + 1) & ring_mask; + free[blk++] = tx_buf->mbuf; + tx_buf->mbuf = NULL; + } + if (blk) + rte_mempool_put_bulk(free[0]->pool, (void **)free, blk); + + txr->tx_cons = cons; +} + static inline void bnxt_tx_cmp_vec(struct bnxt_tx_queue *txq, int nr_pkts) { diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c index 4c04cc43a..f49e29ccb 100644 --- a/drivers/net/bnxt/bnxt_rxtx_vec_neon.c +++ b/drivers/net/bnxt/bnxt_rxtx_vec_neon.c @@ -369,7 +369,7 @@ bnxt_handle_tx_cp_vec(struct bnxt_tx_queue *txq) cpr->valid = !!(raw_cons & cp_ring_struct->ring_size); if (nb_tx_pkts) { if (txq->offloads & DEV_TX_OFFLOAD_MBUF_FAST_FREE) - bnxt_tx_cmp_fast(txq, nb_tx_pkts); + bnxt_tx_cmp_vec_fast(txq, nb_tx_pkts); else bnxt_tx_cmp_vec(txq, nb_tx_pkts); cpr->cp_raw_cons = raw_cons; diff --git a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c index f71f46985..e4ba63551 100644 --- a/drivers/net/bnxt/bnxt_rxtx_vec_sse.c +++ b/drivers/net/bnxt/bnxt_rxtx_vec_sse.c @@ -340,7 +340,7 @@ bnxt_handle_tx_cp_vec(struct bnxt_tx_queue *txq) cpr->valid = !!(raw_cons & cp_ring_struct->ring_size); if (nb_tx_pkts) { if (txq->offloads & DEV_TX_OFFLOAD_MBUF_FAST_FREE) - bnxt_tx_cmp_fast(txq, nb_tx_pkts); + bnxt_tx_cmp_vec_fast(txq, nb_tx_pkts); else bnxt_tx_cmp_vec(txq, nb_tx_pkts); cpr->cp_raw_cons = raw_cons; diff --git a/drivers/net/bnxt/bnxt_txr.c b/drivers/net/bnxt/bnxt_txr.c index 125ac8341..fb358d6f1 100644 --- a/drivers/net/bnxt/bnxt_txr.c +++ b/drivers/net/bnxt/bnxt_txr.c @@ -337,6 +337,40 @@ static uint16_t bnxt_start_xmit(struct rte_mbuf *tx_pkt, return 0; } +/* + * Transmit completion function for use when DEV_TX_OFFLOAD_MBUF_FAST_FREE + * is enabled. + */ +static void bnxt_tx_cmp_fast(struct bnxt_tx_queue *txq, int nr_pkts) +{ + struct bnxt_tx_ring_info *txr = txq->tx_ring; + struct rte_mbuf **free = txq->free; + uint16_t cons = txr->tx_cons; + unsigned int blk = 0; + int i, j; + + for (i = 0; i < nr_pkts; i++) { + struct bnxt_sw_tx_bd *tx_buf; + unsigned short nr_bds; + + tx_buf = &txr->tx_buf_ring[cons]; + nr_bds = tx_buf->nr_bds; + for (j = 0; j < nr_bds; j++) { + if (tx_buf->mbuf) { + /* Add mbuf to the bulk free array */ + free[blk++] = tx_buf->mbuf; + tx_buf->mbuf = NULL; + } + cons = RING_NEXT(txr->tx_ring_struct, cons); + tx_buf = &txr->tx_buf_ring[cons]; + } + } + if (blk) + rte_mempool_put_bulk(free[0]->pool, (void *)free, blk); + + txr->tx_cons = cons; +} + static void bnxt_tx_cmp(struct bnxt_tx_queue *txq, int nr_pkts) { struct bnxt_tx_ring_info *txr = txq->tx_ring; diff --git a/drivers/net/bnxt/bnxt_txr.h b/drivers/net/bnxt/bnxt_txr.h index c0b1fde22..d241227d4 100644 --- a/drivers/net/bnxt/bnxt_txr.h +++ b/drivers/net/bnxt/bnxt_txr.h @@ -44,33 +44,6 @@ static inline uint32_t bnxt_tx_avail(struct bnxt_tx_queue *txq) bnxt_tx_bds_in_hw(txq)) - 1); } -/* - * Transmit completion function for use when DEV_TX_OFFLOAD_MBUF_FAST_FREE - * is enabled. - */ -static inline void -bnxt_tx_cmp_fast(struct bnxt_tx_queue *txq, int nr_pkts) -{ - struct bnxt_tx_ring_info *txr = txq->tx_ring; - uint32_t ring_mask = txr->tx_ring_struct->ring_mask; - struct rte_mbuf **free = txq->free; - uint16_t cons = txr->tx_cons; - unsigned int blk = 0; - - while (nr_pkts--) { - struct bnxt_sw_tx_bd *tx_buf; - - tx_buf = &txr->tx_buf_ring[cons]; - cons = (cons + 1) & ring_mask; - free[blk++] = tx_buf->mbuf; - tx_buf->mbuf = NULL; - } - if (blk) - rte_mempool_put_bulk(free[0]->pool, (void **)free, blk); - - txr->tx_cons = cons; -} - void bnxt_free_tx_rings(struct bnxt *bp); int bnxt_init_one_tx_ring(struct bnxt_tx_queue *txq); int bnxt_init_tx_ring_struct(struct bnxt_tx_queue *txq, unsigned int socket_id);