From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from dpdk.org (dpdk.org [92.243.14.124]) by inbox.dpdk.org (Postfix) with ESMTP id E96C5A04A5; Thu, 18 Jun 2020 16:35:47 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 998D41BF80; Thu, 18 Jun 2020 16:35:41 +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 2FC081BF75 for ; Thu, 18 Jun 2020 16:35:40 +0200 (CEST) Received: from mail-irv-17.broadcom.com (mail-irv-17.lvn.broadcom.net [10.75.242.48]) by rnd-relay.smtp.broadcom.com (Postfix) with ESMTP id 30C1F30D848; Thu, 18 Jun 2020 07:35:39 -0700 (PDT) DKIM-Filter: OpenDKIM Filter v2.10.3 rnd-relay.smtp.broadcom.com 30C1F30D848 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=broadcom.com; s=dkimrelay; t=1592490939; bh=1phZIpKpp3OIlPrc6sL8FX7L23klnMAYo32Fb9QAyWM=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=wEp4XL7oKO8rsl2kO4Z6h9X09fkXb4/Xc+xOneskP1oieKOFQdHXfuHGNM9amDmVo DyT1SdnlUK+UyKYuH25QYXJeoXVmsS259d/ygM7XOSFQpA6R3LeD6GDXlHwZVRpSc8 b2uG1XdEgRfPIBW+WIHPzbFtAuZTgPZblBX8NpHY= Received: from localhost.localdomain (unknown [10.230.150.244]) by mail-irv-17.broadcom.com (Postfix) with ESMTP id 5E5F9140069; Thu, 18 Jun 2020 07:35:38 -0700 (PDT) From: Lance Richardson To: dev@dpdk.org, ajit.khaparde@broadcom.com, Ruifeng.Wang@arm.com Cc: Thomas Monjalon Date: Thu, 18 Jun 2020 10:35:30 -0400 Message-Id: <20200618143532.258537-2-lance.richardson@broadcom.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200618143532.258537-1-lance.richardson@broadcom.com> References: <20200618143532.258537-1-lance.richardson@broadcom.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH 1/3] net/bnxt: disable vector receive for mark action 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 bnxt vector mode receive handler does not support the rte_flow 'mark' action. Since we cannot know in advance whether this action will be required, add support for dynamically switching from vector to non-vector receive when the first flow create request with a mark action is processed. Fixes: 94eb699bc82e ("net/bnxt: support flow mark action") Suggested-by: Thomas Monjalon Signed-off-by: Lance Richardson Reviewed-by: Ajit Kumar Khaparde --- v2: no change drivers/net/bnxt/bnxt_flow.c | 20 ++++++++------------ drivers/net/bnxt/bnxt_rxr.c | 18 ++++++++++++++++++ 2 files changed, 26 insertions(+), 12 deletions(-) diff --git a/drivers/net/bnxt/bnxt_flow.c b/drivers/net/bnxt/bnxt_flow.c index 84a21dba9..19bc66a5a 100644 --- a/drivers/net/bnxt/bnxt_flow.c +++ b/drivers/net/bnxt/bnxt_flow.c @@ -18,6 +18,7 @@ #include "bnxt_hwrm.h" #include "bnxt_ring.h" #include "bnxt_rxq.h" +#include "bnxt_rxr.h" #include "bnxt_vnic.h" #include "hsi_struct_def_dpdk.h" @@ -1403,18 +1404,6 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev, bnxt_update_filter_flags_en(filter, filter1, use_ntuple); break; case RTE_FLOW_ACTION_TYPE_MARK: - if (bp->flags & BNXT_FLAG_RX_VECTOR_PKT_MODE) { - PMD_DRV_LOG(DEBUG, - "Disable vector processing for mark\n"); - rte_flow_error_set(error, - ENOTSUP, - RTE_FLOW_ERROR_TYPE_ACTION, - act, - "Disable vector processing for mark"); - rc = -rte_errno; - goto ret; - } - if (bp->mark_table == NULL) { rte_flow_error_set(error, ENOMEM, @@ -1425,6 +1414,13 @@ bnxt_validate_and_parse_flow(struct rte_eth_dev *dev, goto ret; } + if (bp->flags & BNXT_FLAG_RX_VECTOR_PKT_MODE) { + PMD_DRV_LOG(DEBUG, + "Disabling vector processing for mark\n"); + bp->eth_dev->rx_pkt_burst = bnxt_recv_pkts; + bp->flags &= ~BNXT_FLAG_RX_VECTOR_PKT_MODE; + } + filter->valid_flags |= BNXT_FLOW_MARK_FLAG; filter->mark = ((const struct rte_flow_action_mark *) act->conf)->id; diff --git a/drivers/net/bnxt/bnxt_rxr.c b/drivers/net/bnxt/bnxt_rxr.c index 91ff72904..eeb0aeefc 100644 --- a/drivers/net/bnxt/bnxt_rxr.c +++ b/drivers/net/bnxt/bnxt_rxr.c @@ -747,6 +747,24 @@ uint16_t bnxt_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts, !rte_spinlock_trylock(&rxq->lock))) return 0; +#if defined(RTE_ARCH_X86) + /* + * Replenish buffers if needed when a transition has been made from + * vector- to non-vector- receive processing. + */ + while (unlikely(rxq->rxrearm_nb)) { + if (!bnxt_alloc_rx_data(rxq, rxr, rxq->rxrearm_start)) { + rxr->rx_prod = rxq->rxrearm_start; + bnxt_db_write(&rxr->rx_db, rxr->rx_prod); + rxq->rxrearm_start++; + rxq->rxrearm_nb--; + } else { + /* Retry allocation on next call. */ + break; + } + } +#endif + /* Handle RX burst request */ while (1) { cons = RING_CMP(cpr->cp_ring_struct, raw_cons); -- 2.25.1