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 EDB55A00BE; Wed, 29 Apr 2020 15:04:16 +0200 (CEST) Received: from [92.243.14.124] (localhost [127.0.0.1]) by dpdk.org (Postfix) with ESMTP id 9C06F1DACE; Wed, 29 Apr 2020 15:04:16 +0200 (CEST) Received: from git-send-mailer.rdmz.labs.mlnx (unknown [37.142.13.130]) by dpdk.org (Postfix) with ESMTP id BD7601DACA for ; Wed, 29 Apr 2020 15:04:14 +0200 (CEST) From: Xiaoyu Min To: Wenzhuo Lu , Jingjing Wu , Bernard Iremonger , John McNamara , Marko Kovacevic Cc: dev@dpdk.org Date: Wed, 29 Apr 2020 16:04:12 +0300 Message-Id: X-Mailer: git-send-email 2.21.0 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH] app/testpmd: add cmdline option to set Rx mq mode 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" One new cmdline option `--rx-mq-mode` is added in order to have the possibility to check whether PMD handle the mq mode correctly or not. The reason is some NICs need to do different settings based on different RX mq mode, i.e RSS or not. With this support in testpmd, the above scenario can be tested easily. Signed-off-by: Xiaoyu Min --- app/test-pmd/parameters.c | 12 ++++++++++++ app/test-pmd/testpmd.c | 17 ++++++++++++++--- app/test-pmd/testpmd.h | 3 +++ doc/guides/testpmd_app_ug/run_app.rst | 7 +++++++ 4 files changed, 36 insertions(+), 3 deletions(-) diff --git a/app/test-pmd/parameters.c b/app/test-pmd/parameters.c index 30c1753c32..a9dd58e96b 100644 --- a/app/test-pmd/parameters.c +++ b/app/test-pmd/parameters.c @@ -212,6 +212,7 @@ usage(char* progname) printf(" --noisy-lkup-num-writes=N: do N random reads and writes per packet\n"); printf(" --no-iova-contig: mempool memory can be IOVA non contiguous. " "valid only with --mp-alloc=anon\n"); + printf(" --rx-mq-mode=0xX: hexadecimal bitmask of RX mq mode\n"); } #ifdef RTE_LIBRTE_CMDLINE @@ -670,6 +671,7 @@ launch_args_parse(int argc, char** argv) { "noisy-lkup-num-reads", 1, 0, 0 }, { "noisy-lkup-num-reads-writes", 1, 0, 0 }, { "no-iova-contig", 0, 0, 0 }, + { "rx-mq-mode", 1, 0, 0 }, { 0, 0, 0, 0 }, }; @@ -1363,6 +1365,16 @@ launch_args_parse(int argc, char** argv) } if (!strcmp(lgopts[opt_idx].name, "no-iova-contig")) mempool_flags = MEMPOOL_F_NO_IOVA_CONTIG; + + if (!strcmp(lgopts[opt_idx].name, "rx-mq-mode")) { + char *end = NULL; + n = strtoul(optarg, &end, 16); + if (n >= 0) + rx_mq_mode = (enum rte_eth_rx_mq_mode)n; + else + rte_exit(EXIT_FAILURE, + "rx-mq-mode must be >= 0\n"); + } break; case 'h': usage(argv[0]); diff --git a/app/test-pmd/testpmd.c b/app/test-pmd/testpmd.c index 99bacddbfd..9536d6ee27 100644 --- a/app/test-pmd/testpmd.c +++ b/app/test-pmd/testpmd.c @@ -482,6 +482,11 @@ uint8_t bitrate_enabled; struct gro_status gro_ports[RTE_MAX_ETHPORTS]; uint8_t gro_flush_cycles = GRO_DEFAULT_FLUSH_CYCLES; +/* + * RX mq mode value set in the commandline + */ +enum rte_eth_rx_mq_mode rx_mq_mode = ETH_MQ_RX_VMDQ_DCB_RSS; + /* Forward function declarations */ static void setup_attached_port(portid_t pi); static void map_port_queue_stats_mapping_registers(portid_t pi, @@ -3337,7 +3342,9 @@ init_port_config(void) if (port->dcb_flag == 0) { if( port->dev_conf.rx_adv_conf.rss_conf.rss_hf != 0) - port->dev_conf.rxmode.mq_mode = ETH_MQ_RX_RSS; + port->dev_conf.rxmode.mq_mode = + (enum rte_eth_rx_mq_mode) + (rx_mq_mode & ETH_MQ_RX_RSS); else port->dev_conf.rxmode.mq_mode = ETH_MQ_RX_NONE; } @@ -3438,7 +3445,9 @@ get_eth_dcb_conf(portid_t pid, struct rte_eth_conf *eth_conf, } /* set DCB mode of RX and TX of multiple queues */ - eth_conf->rxmode.mq_mode = ETH_MQ_RX_VMDQ_DCB; + eth_conf->rxmode.mq_mode = + (enum rte_eth_rx_mq_mode) + (rx_mq_mode & ETH_MQ_RX_VMDQ_DCB); eth_conf->txmode.mq_mode = ETH_MQ_TX_VMDQ_DCB; } else { struct rte_eth_dcb_rx_conf *rx_conf = @@ -3458,7 +3467,9 @@ get_eth_dcb_conf(portid_t pid, struct rte_eth_conf *eth_conf, tx_conf->dcb_tc[i] = i % num_tcs; } - eth_conf->rxmode.mq_mode = ETH_MQ_RX_DCB_RSS; + eth_conf->rxmode.mq_mode = + (enum rte_eth_rx_mq_mode) + (rx_mq_mode & ETH_MQ_RX_DCB_RSS); eth_conf->rx_adv_conf.rss_conf = rss_conf; eth_conf->txmode.mq_mode = ETH_MQ_TX_DCB; } diff --git a/app/test-pmd/testpmd.h b/app/test-pmd/testpmd.h index 7ff4c5dba3..32bb324c94 100644 --- a/app/test-pmd/testpmd.h +++ b/app/test-pmd/testpmd.h @@ -602,6 +602,9 @@ struct mplsoudp_decap_conf { }; extern struct mplsoudp_decap_conf mplsoudp_decap_conf; +/* RX mq mode parameter. */ +extern enum rte_eth_rx_mq_mode rx_mq_mode; + static inline unsigned int lcore_num(void) { diff --git a/doc/guides/testpmd_app_ug/run_app.rst b/doc/guides/testpmd_app_ug/run_app.rst index 727ef52b8f..4f46299e68 100644 --- a/doc/guides/testpmd_app_ug/run_app.rst +++ b/doc/guides/testpmd_app_ug/run_app.rst @@ -481,3 +481,10 @@ The command line options are: Enable to create mempool which is not IOVA contiguous. Valid only with --mp-alloc=anon. The default value is 0. + +* ``--rx-mq-mode`` + + Set the hexadecimal bitmask of RX queue mq mode. + The default value is 0x7:: + + ETH_MQ_RX_RSS_FLAG | ETH_MQ_RX_DCB_FLAG | ETH_MQ_RX_VMDQ_FLAG -- 2.26.0