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 BCCADA04C8 for ; Sat, 19 Sep 2020 09:40:07 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id B5A111D993; Sat, 19 Sep 2020 09:40:07 +0200 (CEST) Received: from huawei.com (szxga05-in.huawei.com [45.249.212.191]) by dpdk.org (Postfix) with ESMTP id AE8DB1D993 for ; Sat, 19 Sep 2020 09:40:05 +0200 (CEST) Received: from DGGEMS409-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 0BE5276530A579626E18; Sat, 19 Sep 2020 15:40:04 +0800 (CST) Received: from localhost.localdomain (10.69.192.56) by DGGEMS409-HUB.china.huawei.com (10.3.19.209) with Microsoft SMTP Server id 14.3.487.0; Sat, 19 Sep 2020 15:39:53 +0800 From: "Min Hu (Connor)" To: CC: , Chengchang Tang , , Wei Hu Date: Sat, 19 Sep 2020 15:37:11 +0800 Message-ID: <1600501034-50042-4-git-send-email-humin29@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1600501034-50042-1-git-send-email-humin29@huawei.com> References: <1600501034-50042-1-git-send-email-humin29@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.69.192.56] X-CFilter-Loop: Reflected Subject: [dpdk-stable] [PATCH v3 3/6] app/testpmd: remove restriction on txpkts set X-BeenThere: stable@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches for DPDK stable branches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: stable-bounces@dpdk.org Sender: "stable" From: Chengchang Tang Currently, if nb_txd is not set, the txpkts is not allowed to be set because the nb_txd is used to avoid the numer of segments exceed the Tx ring size and the default value of nb_txd is 0. And there is a bug that nb_txd is the global configuration for Tx ring size and the ring size could be changed by some command per queue. So these valid check is unreliable and introduced unnecessary constraints. This patch adds a valid check function to use the real Tx ring size to check the validity of txpkts. Fixes: af75078fece3 ("first public release") Cc: stable@dpdk.org Signed-off-by: Chengchang Tang Signed-off-by: Wei Hu (Xavier) --- app/test-pmd/config.c | 42 ++++++++++++++++++++++++++++++++++++++---- 1 file changed, 38 insertions(+), 4 deletions(-) diff --git a/app/test-pmd/config.c b/app/test-pmd/config.c index 4e33208..882de2d 100644 --- a/app/test-pmd/config.c +++ b/app/test-pmd/config.c @@ -2984,17 +2984,51 @@ show_tx_pkt_segments(void) printf("Split packet: %s\n", split); } +static bool +nb_segs_is_invalid(unsigned int nb_segs) +{ + uint16_t port_id; + + RTE_ETH_FOREACH_DEV(port_id) { + struct rte_port *port = &ports[port_id]; + uint16_t ring_size; + uint16_t queue_id; + + /* + * When configure the txq by rte_eth_tx_queue_setup with + * nb_tx_desc being 0, it will use a default value provided by + * PMDs to setup this txq. If the default value is 0, it will + * use the RTE_ETH_DEV_FALLBACK_TX_RINGSIZE to setup this txq. + */ + for (queue_id = 0; queue_id < nb_txq; queue_id++) { + if (port->nb_tx_desc[queue_id]) + ring_size = port->nb_tx_desc[queue_id]; + else if (port->dev_info.default_txportconf.ring_size) + ring_size = + port->dev_info.default_txportconf.ring_size; + else + ring_size = RTE_ETH_DEV_FALLBACK_TX_RINGSIZE; + + if (ring_size < nb_segs) { + printf("nb segments per TX packets=%u >= TX " + "queue(%u) ring_size=%u - ignored\n", + nb_segs, queue_id, ring_size); + return true; + } + } + } + + return false; +} + void set_tx_pkt_segments(unsigned *seg_lengths, unsigned nb_segs) { uint16_t tx_pkt_len; unsigned i; - if (nb_segs >= (unsigned) nb_txd) { - printf("nb segments per TX packets=%u >= nb_txd=%u - ignored\n", - nb_segs, (unsigned int) nb_txd); + if (nb_segs_is_invalid(nb_segs)) return; - } /* * Check that each segment length is greater or equal than -- 2.7.4